我在 linux 中使用。程式碼:
int main()
{
int N=0;
int ch=0;
int i=0,j=0;
while( ( ch=getchar() ) != EOF ) {
N=(int)ch - 48 ;getchar() ;
j=0;
for( i=1; i<= N*N; i++) {
ch= (int) (getchar() );if( i%N == (1+j) ) {
putchar(ch);
}if( i%N == (N-1) ) {
j++;
}
if(i==N*N) {
putchar(ch);
}
}
putchar('\n');
ch=getchar() ;
}return 0;
}
data.in 內容:
5
HDNOWEEIOWWELWDDWWLOPODWO
執行 cat data.1 | bin/Debug/0-c 是正確的。
但是丟入測試,卻是錯誤,如下:
WA (line:1)
您的答案為: EEWW
正確答案為: HELLO
是執行環境問題嗎?
目前大致看到以下3個問題:
1. 沒有 #include<stdio.h> 就使用 getchar()/putchar() 並不是標準的寫法,
所以並不是用於所有的編譯環境,
雖然在 ZJ 的 C 可以編譯成功就是了... = ="
2. 關於測試的問題,
ZJ 在「測試執行」的換行字元似乎是windows環境下的換行字元, (強調似乎是因為我也不太確定)
由於windows的換行字元是 '\n\r' ,
所以在「測試執行」若要使用 getchar() 讀換行要輸入2次, (雖然不太確定是否就是'\n\r'但其確實佔了2個字元)
但是在「送出解答」並沒有這個問題~
所以是有可能在「測試執行」WA或RE但「送出解答」卻AC的~
3. 在輸入一個正整數 N 的部分你使用的是 N=(int)ch - 48 ;
這個方式在遇到 N 是2位數以上的數字(EX: 123)時只會讀取到最高位數(以123的例子來說就是1),
並且由於剩餘的位數(以123的例子來說就是23)尚未被輸入,
所以在接下來的輸入會讀取到剩餘的位數導致並非預想的輸入~
以上希望有幫助到你~ OwO
目前大致看到以下3個問題:
1. 沒有 #include 就使用 getchar()/putchar() 並不是標準的寫法,
所以並不是用於所有的編譯環境,
雖然在 ZJ 的 C 可以編譯成功就是了... = ="
2. 關於測試的問題,
ZJ 在「測試執行」的換行字元似乎是windows環境下的換行字元, (強調似乎是因為我也不太確定)
由於windows的換行字元是 '\n\r' ,
所以在「測試執行」若要使用 getchar() 讀換行要輸入2次, (雖然不太確定是否就是'\n\r'但其確實佔了2個字元)
但是在「送出解答」並沒有這個問題~
所以是有可能在「測試執行」WA或RE但「送出解答」卻AC的~
3. 在輸入一個正整數 N 的部分你使用的是 N=(int)ch - 48 ;
這個方式在遇到 N 是2位數以上的數字(EX: 123)時只會讀取到最高位數(以123的例子來說就是1),
並且由於剩餘的位數(以123的例子來說就是23)尚未被輸入,
所以在接下來的輸入會讀取到剩餘的位數導致並非預想的輸入~
以上希望有幫助到你~ OwO
感謝您!