<img width="108" height="40" alt="浙江大學" src="http://imgsize.ph.126.net/?enlarge=true&imgurl=http://img1.ph.126.net/DRP1fc7IDe3Jux_yvA0OnQ==/3186859686418268890.jpg_108x40x1x95.png" />
第1周:計算
題目內容:
逆序的三位數:
程序每次讀入一個正三位數,然后輸出逆序的數字。注意,當輸入的數字含有結尾的0時,輸出不應帶有前導的0。比如輸入700,輸出應該是7。
提示:用%10可以得到個位數,用/100可以得到百位數...。將這樣得到的三個數字合起來:百位*100+十位*10+個位,就得到了結果。
輸入格式:
每個測試是一個3位的正整數。
輸出格式:
輸出逆序的數。
輸入樣例:
123
輸出樣例:
321
#include<stdio.h> int main() { int n; scanf("%d",&n); int t1=n%10; int t2=(n-n/100*100)/10; int t3=n/100; int t=t1*100+t2*10+t3; printf("%d",t); return 0; }
第2周:判斷
題目內容:
UTC是世界協調時,BJT是北京時間,UTC時間相當於BJT減去8。現在,你的程序要讀入一個整數,表示BJT的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果小時不是0而分小於10分,需要保留十位上的0;如果小時是0而分小於10分的,則不需要保留十位上的0。如1124表示11點24分,而905表示9點5分,36表示0點36分,7表示0點7分。
有效的輸入范圍是0到2359,即你的程序不可能從測試服務器讀到0到2359以外的輸入數據。
你的程序要輸出這個時間對應的UTC時間,輸出的格式和輸入的相同,即輸出一個整數,表示UTC的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果小時不是0而分小於10分,需要保留十位上的0;如果小時是0而分小於10分的,則不需要保留十位上的0。
提醒:要小心跨日的換算。
輸入格式:
一個整數,表示BJT的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果小時不是0而分小於10分,需要保留十位上的0;如果小時是0而分小於10分的,則不需要保留十位上的0。
輸出格式:
一個整數,表示UTC的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果小時不是0而分小於10分,需要保留十位上的0;如果小時是0而分小於10分的,則不需要保留十位上的0。
輸入樣例:
803
輸出樣例:
3
# include <stdio.h> int main() { int i; scanf("%d",&i); if(i >= 0 && i <= 2359) { if(i > 0 && i < 10) { i = 1600 + i; printf("%d",i); } else if(i == 0){ i = 1600; printf("%d",i); } else if(i >= 10 && i < 100 ){ i = 1600 + i; printf("%d",i); } else if(i >= 100 && i < 1000) { if(i/100 == 8) { i = i % 100; printf("%d",i); } else if(i/100 > 0 && i/100 < 8) { i = (i/100 - 8 + 24) *100 + (i % 100); printf("%d",i); } else if(i/100 == 9) { i = (i/100 - 8)*100 + i % 100; printf("%d",i); } } else if(i >= 1000 && i <= 2359) { i = (i /100 -8)*100 + (i % 100); printf("%d",i); } } return 0; }
題目內容:
無線電台的RS制信號報告是由三兩個部分組成的:
-
R(Readability) 信號可辨度即清晰度.
-
S(Strength) 信號強度即大小.
其中R位於報告第一位,共分5級,用1—5數字表示.
-
Unreadable
-
Barely readable, occasional words distinguishable
-
Readable with considerable difficulty
-
Readable with practically no difficulty
-
Perfectly readable
報告第二位是S,共分九個級別,用1—9中的一位數字表示
-
Faint signals, barely perceptible
-
Very weak signals
-
Weak signals
-
Fair signals
-
Fairly good signals
-
Good signals
-
Moderately strong signals
-
Strong signals
-
Extremely strong signals
現在,你的程序要讀入一個信號報告的數字,然后輸出對應的含義。如讀到59,則輸出:
Extremely strong signals, perfectly readable.
輸入格式:
一個整數,信號報告。整數的十位部分表示可辨度,個位部分表示強度。輸入的整數范圍是[11,59]中的個位不為0的數字,這個范圍外的數字不可能出現在測試數據中。
輸出格式:
一句話,表示這個信號報告的意義。按照題目中的文字,先輸出表示強度的文字,跟上逗號和空格,然后是表示可辨度的文字,跟上句號。注意可辨度的句子的第一個字母是小寫的。注意這里的標點符號都是英文的。
輸入樣例:
33
輸出樣例:
Weak signals, readable with considerable difficulty.
# include <stdio.h> int main() { int n; int R,S; scanf("%d",&n); R = n/10; S = n%10; switch(S) { case 1: printf("Faint signals, barely perceptible, "); break; case 2: printf("Very weak signals, "); break; case 3: printf("Weak signals, "); break; case 4: printf("Fair signals, "); break; case 5: printf("Fairly good signals, "); break; case 6: printf("Good signals, "); break;; case 7: printf("Moderately strong signals, "); break; case 8: printf("Strong signals, "); break; case 9: printf("Extremely strong signals, "); break; } switch(R) { case 1: printf("unreadable."); break; case 2: printf("barely readable, occasional words distinguishable."); break; case 3: printf("readable with considerable difficulty."); break; case 4: printf("readable with practically no difficulty."); break; case 5: printf("perfectly readable."); break; } }
第3周:循環
題目內容:
你的程序要讀入一系列正整數數據,輸入-1表示輸入結束,-1本身不是輸入的數據。程序輸出讀到的數據中的奇數和偶數的個數。
輸入格式:
一系列正整數,整數的范圍是(0,100000)。如果輸入-1則表示輸入結束。
輸出格式:
兩個整數,第一個整數表示讀入數據中的奇數的個數,第二個整數表示讀入數據中的偶數的個數。兩個整數之間以空格分隔。
輸入樣例:
9 3 4 2 5 7 -1
輸出樣例:
4 2
# include <stdio.h> int main() { int i,j = 0,k = 0; scanf("%d",&i); while (i != -1) { if (i % 2 == 0) { ++j; } else { ++k; } scanf("%d",&i); } printf("%d %d",k,j); return 0; }
題目內容:
對數字求特征值是常用的編碼算法,奇偶特征是一種簡單的特征值。對於一個整數,從個位開始對每一位數字編號,個位是1號,十位是2號,以此類推。這個整數在第n位上的數字記作x,如果x和n的奇偶性相同,則記下一個1,否則記下一個0。按照整數的順序把對應位的表示奇偶性的0和1都記錄下來,就形成了一個二進制數字。比如,對於342315,這個二進制數字就是001101。
這里的計算可以用下面的表格來表示:
數字 |
3 |
4 |
2 |
3 |
1 |
5 |
數位 |
6 |
5 |
4 |
3 |
2 |
1 |
數字奇偶 |
奇 |
偶 |
偶 |
奇 |
奇 |
奇 |
數位奇偶 |
偶 |
奇 |
偶 |
奇 |
偶 |
奇 |
奇偶一致 |
0 |
0 |
1 |
1 |
0 |
1 |
二進制位值 |
32 |
16 |
8 |
4 |
2 |
1 |
你的程序要讀入一個非負整數,整數的范圍是[0,1000000],然后按照上述算法計算出表示奇偶性的那個二進制數字,輸出它對應的十進制值。
提示:將整數從右向左分解,數位每次加1,而二進制值每次乘2。
輸入格式:
一個非負整數,整數的范圍是[0,1000000]。
輸出格式:
一個整數,表示計算結果。
輸入樣例:
342315
輸出樣例:
13
# include <stdio.h> int main() { int a,m,two = 1,s = 0; int cout = 0; scanf("%d",&a); while(a != 0) { m = a % 10; a /= 10; ++cout; if(m % 2 == cout % 2) { s += two; } two *= 2; } printf("%d\n",s); return 0; }
第4周:循環控制
題目內容:
我們認為2是第一個素數,3是第二個素數,5是第三個素數,依次類推。
現在,給定兩個整數n和m,0<n<=m<=200,你的程序要計算第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。
輸入格式:
兩個整數,第一個表示n,第二個表示m。
輸出格式:
一個整數,表示第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。
輸入樣例:
2 4
輸出樣例:
15
#include <stdio.h> int isPrime(long n); int main(int argc, char const *argv[]) { int n, m, count; long l, sum; while(1) { scanf("%d%d", &n, &m); if (n > 0 && n <= m && m <= 200) break; } count = 0; sum = 0; l = 2; do { if (isPrime(l)) { count ++; if (count >= n) sum += l; } l++; } while (count < m); printf("%d\n", sum); return 0; } int isPrime(long n) { int i; if (n == 2) return 1; for (i = 2; i*i <= n;i++) if (n % i == 0) return 0; return 1; }
題目內容:
你的程序要讀入一個整數,范圍是[-100000,100000]。然后,用漢語拼音將這個整數的每一位輸出出來。
如輸入1234,則輸出:
yi er san si
注意,每個字的拼音之間有一個空格,但是最后的字后面沒有空格。當遇到負數時,在輸出的開頭加上“fu”,如-2341輸出為:
fu er san si yi
輸入格式:
一個整數,范圍是[-100000,100000]。
輸出格式:
表示這個整數的每一位數字的漢語拼音,每一位數字的拼音之間以空格分隔,末尾沒有空格。
輸入樣例:
-30
輸出樣例:
fu san ling
# include <stdio.h> # include <math.h> int main() { int n,c = 0; scanf("%d",&n); if(n == 0){ printf("ling"); } else{ if(n < 0){ printf("fu "); n = -n; } int t = n; while(t != 0){ t /= 10; ++c; } int w = n,p,z; while(c > 0){ z = pow(10.0,c-1); p = w / z; if(p == 0){ printf("ling"); } else if(p == 1){ printf("yi"); } else if(p == 2){ printf("er"); } else if(p == 3){ printf("san"); } else if(p == 4){ printf("si"); } else if(p == 5){ printf("wu"); } else if(p == 6){ printf("liu"); } else if(p == 7){ printf("qi"); } else if(p == 8){ printf("ba"); } else if(p == 9){ printf("jiu"); } if(c != 1){ printf(" "); } c--; w = w - p*z; } } return 0; }
第5周:數據類型
第一次單元測驗
返回
int j=4;
for ( int i=j; i<=2*j; i++ ) {
switch ( i/j ) {
case 0:
case 1: printf(“*”); break;
case 2: printf(“#”);
}
}
-
A.
****
-
B.
*#
-
C.
****#
-
D.
***#
-
A.12
-
B.20
-
C.24
-
D.10
-
A.include
-
B.int
-
C.if
-
D.for
-
A.124d
-
B.0124
-
C.0x124
-
D.124
-
A.打印出"hello"
-
B.無法編譯
-
C.打印出"hello bye-bye"
-
D.打印出"bye-bye"
int i,j=6;
-
A.i不會被初始化,而j是6
-
B.i被初始為0,而j是6
-
C.i和j的初始值都是6
-
D.不能通過編譯
-
A.255
-
B.-1
-
C.編譯錯誤,因為賦值的時候類型不一致
-
D.編譯錯誤,因為賦值的時候不能把負數賦給char
-
A.打印不出東西
-
B.因為while(0),無法編譯
-
C.打印出6
-
D.打印出5
對於以下代碼:
int i;
for ( i=0; i<10; i++)
printf("%d", i);
for循環結束后,i的值是多少?
-
A.
9
-
B.
10
-
C.
11
-
D.
i沒有確定的值
-
A.for (i=0; i<10, j<10; i++);
-
B.for (i=0; i<10; i--);
-
C.for (i=0; i++ );
-
D.for (;;);
int i=10;
long long t = sizeof(i++);
printf("%d", i);
表達式(double)(10/4*4)
的結果是_____
題目內容:
由於計算機內部表達方式的限制,浮點運算都有精度問題,為了得到高精度的計算結果,就需要自己設計實現方法。
(0,1)之間的任何浮點數都可以表達為兩個正整數的商,為了表達這樣兩個數的商,可以將相除的結果以多個整數來表示,每個整數表示結果的一位。即商的第一位用一個整數來表示,第二位用另一個整數來表示,以此類推,就可以輸出一個高精度的除法結果了。
如16/19的結果0.8421052631...就可以依次輸出8、4、2、1、0、5、2、6、3、1...。
而除法的過程,則可以模仿人工列豎式做除法的方式,先將被除數乘以10,得到一位商以后,將余數乘以10作為下一輪計算的被除數:
160/19->8余8
80/19->4余4
...
當某次余數為0時,則表明除盡。
現在,請寫一個程序,輸入一個分數,計算出它的小數形式。無論是否可以除盡,輸出最多小數點后200位。
輸入格式:
形如
a/b
的兩個數,其中10<=a<b<100。也就是說,這個小數一定是小於1的正數。
提示:輸入是帶着兩個數中間的“/”的,所以scanf應采用“%d/%d”這樣的輸入格式。
輸出格式:
形如
0.xxxxxxxxx
的小數,小數點后最多200位。輸出結束的時候要帶着回車換行。如果a/b是一個有限不循環小數,則輸出完所有的有效位就可以了,不需要再輸出后面的0來湊滿200位。
輸入樣例:
16/19
輸出樣例:
0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684
# include <stdio.h> int main() { int n,m,c = 0; scanf("%d/%d",&n,&m); printf("0."); while ( c < 200) { c++; n *= 10; printf("%d",n/m); n %= m; if ( n == 0) break; } return 0; }
第6周:函數
題目內容:
每個非素數(合數)都可以寫成幾個素數(也可稱為質數)相乘的形式,這幾個素數就都叫做這個合數的質因數。比如,6可以被分解為2x3,而24可以被分解為2x2x2x3。
現在,你的程序要讀入一個[2,100000]范圍內的整數,然后輸出它的質因數分解式;當讀到的就是素數時,輸出它本身。
提示:可以用一個函數來判斷某數是否是素數。
輸入格式:
一個整數,范圍在[2,100000]內。
輸出格式:
形如:
n=axbxcxd
或
n=n
所有的符號之間都沒有空格,x是小寫字母x。abcd這樣的數字一定是從小到大排列的。
輸入樣例:
18
輸出樣例:
18=2x3x3
# include <stdio.h> int is(int i) { int j; for ( j = 2; j < i; ++j ) { if ( i%j == 0) break; } if ( j != i) return 0; else return 1; } int main() { int n,i; scanf("%d",&n); printf("%d=",n); if ( is(n)) printf("%d\n",n); else { while ( n != 1 ){ for ( i = 2; i <= n; ++i) { if (is(i) && n%i == 0){ printf("%d",i); if ( i != n) printf("x"); else printf("\n"); n /= i; i = 1; } } } } return 0; }
題目內容:
一個正整數的因子是所有可以整除它的正整數。而一個數如果恰好等於除它本身外的因子之和,這個數就稱為完數。例如6=1+2+3(6的因子是1,2,3)。
現在,你要寫一個程序,讀入兩個正整數n和m(1<=n<m<1000),輸出[n,m]范圍內所有的完數。
提示:可以寫一個函數來判斷某個數是否是完數。
輸入格式:
兩個正整數,以空格分隔。
輸出格式:
其間所有的完數,以空格分隔,最后一個數字后面沒有空格。如果沒有,則輸出一行文字:
NIL
(輸出NIL三個大寫字母加回車)。
輸入樣例:
1 10
輸出樣例:
6
# include <stdio.h> int w(int n) { int i,s = 0; for ( i = 1; i < n; ++i) { if ( n%i == 0){ s += i; } } if ( n == s) return 1; else return 0; } int main() { int i,j,k,c = 0; scanf("%d%d",&i,&j); for ( k = i; k <= j; ++k) { if (w(k)) { if ( c == 2) printf(" "); printf("%d",k); c = 1; c++; } } if ( k == j+1 && c != 0) printf("\n"); if (c == 0 ) printf("NIL\n"); return 0; }
第7周:數組
題目內容:
一個多項式可以表達為x的各次冪與系數乘積的和,比如:
2x6+3x5+12x3+6x+20
現在,你的程序要讀入兩個多項式,然后輸出這兩個多項式的和,也就是把對應的冪上的系數相加然后輸出。
程序要處理的冪最大為100。
輸入格式:
總共要輸入兩個多項式,每個多項式的輸入格式如下:
每行輸入兩個數字,第一個表示冪次,第二個表示該冪次的系數,所有的系數都是整數。第一行一定是最高冪,最后一行一定是0次冪。
注意第一行和最后一行之間不一定按照冪次降低順序排列;如果某個冪次的系數為0,就不出現在輸入數據中了;0次冪的系數為0時還是會出現在輸入數據中。
輸出格式:
從最高冪開始依次降到0冪,如:
2x6+3x5+12x3-6x+20
注意其中的x是小寫字母x,而且所有的符號之間都沒有空格,如果某個冪的系數為0則不需要有那項。
輸入樣例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
輸出樣例:
4x6+6x5+12x3+12x2+12x+40
#include <stdio.h> #include <math.h> void outNum(int j,int k) { int absk = abs(k); if(absk==1 && j!=1 && j!=0) { printf("x%d",j); } else if(absk==1 && j!=0) { printf("x"); } else if(absk==1) { printf("%d",absk); } else if(j==0) { printf("%d",absk); } else if(j==1) { printf("%dx",absk); } else { printf("%dx%d",absk,j); } } int main() { int num[101] = { (0) }; int cut = 0; int ent = 0; int i,j,k; while(cut < 2) { k=0; scanf("%d %d",&j,&k); num[j] += k; if(j==0) cut++; } for(i=100;i>-1;i--) { j=i; k=num[j]; if(k!=0) { ent++; if(cut==2) { if(k<0) printf("-"); outNum(j,k); cut ++; } else { if(k<0) { printf("-"); outNum(j,k); } else { printf("+"); outNum(j,k); } } } } if(ent==0) printf("0"); return 0; }
題目內容:
給定一個n*n矩陣A。矩陣A的鞍點是一個位置(i,j),在該位置上的元素是第i行上的最大數,第j列上的最小數。一個矩陣A也可能沒有鞍點。
你的任務是找出A的鞍點。
輸入格式:
輸入的第1行是一個正整數n, (1<=n<=100),然后有n行,每一行有n個整數,同一行上兩個整數之間有一個或多個空格。
輸出格式:
對輸入的矩陣,如果找到鞍點,就輸出其下標。下標為兩個數字,第一個數字是行號,第二個數字是列號,均從0開始計數。
如果找不到,就輸出
NO
題目所給的數據保證了不會出現多個鞍點。
輸入樣例:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
輸出樣例:
2 1
#include <stdio.h> #define M 100 #define N 100 int main(void) { int i,j,m,n; int max,jmax,flag,f = 1; int a[M][N]; while(scanf("%d",&n) != EOF){ for(i = 0; i < n; ++i) for(j = 0; j < n; ++j) scanf("%d",&a[i][j]); for(i = 0; i < n; ++i){ max = a[i][0]; jmax = 0; for(j = 1; j < n; ++j) { if(max < a[i][j]){ max = a[i][j]; jmax = j; } } flag = 1; int ii; for(ii = 0; ii < n && flag; ++ii) { if(a[ii][jmax] < max) flag = 0; } if(flag == 1){ printf("%d %d\n",i,jmax); f = 0; } } if(f) printf("NO\n"); } return 0; }
第八周:指針與字符串
題目內容:
你的程序要讀入一行文本,其中以空格分隔為若干個單詞,以‘.’結束。你要輸出這行文本中每個單詞的長度。這里的單詞與語言無關,可以包括各種符號,比如“it's”算一個單詞,長度為4。注意,行中可能出現連續的空格。
輸入格式:
輸入在一行中給出一行文本,以‘.’結束,結尾的句號不能計算在最后一個單詞的長度內。
輸出格式:
在一行中輸出這行文本對應的單詞的長度,每個長度之間以空格隔開,行末沒有最后的空格。
輸入樣例:
It's great to see you here.
輸出樣例:
4 5 2 3 3 4
#include <stdio.h> int main() { int i=0; char a; while(1){ scanf("%c",&a); if(a == '.'){ if(i!=0){ printf("%d",i); } printf("\n"); break; } if(a==' '){ if(i!=0){ printf("%d ",i); i=0; } } else{ i+=1; } } return 0; }
題目內容:
NMEA-0183協議是為了在不同的GPS(全球定位系統)導航設備中建立統一的BTCM(海事無線電技術委員會)標准,由美國國家海洋電子協會(NMEA-The National Marine Electronics Associa-tion)制定的一套通訊協議。GPS接收機根據NMEA-0183協議的標准規范,將位置、速度等信息通過串口傳送到PC機、PDA等設備。
NMEA-0183協議是GPS接收機應當遵守的標准協議,也是目前GPS接收機上使用最廣泛的協議,大多數常見的GPS接收機、GPS數據處理軟件、導航軟件都遵守或者至少兼容這個協議。
NMEA-0183協議定義的語句非常多,但是常用的或者說兼容性最廣的語句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。
其中$GPRMC語句的格式如下:
$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
這里整條語句是一個文本行,行中以逗號“,”隔開各個字段,每個字段的大小(長度)不一,這里的示例只是一種可能,並不能認為字段的大小就如上述例句一樣。
字段0:$GPRMC,語句ID,表明該語句為Recommended Minimum Specific GPS/TRANSIT Data(RMC)推薦最小定位信息
字段1:UTC時間,hhmmss.sss格式
字段2:狀態,A=定位,V=未定位
字段3:緯度ddmm.mmmm,度分格式(前導位數不足則補0)
字段4:緯度N(北緯)或S(南緯)
字段5:經度dddmm.mmmm,度分格式(前導位數不足則補0)
字段6:經度E(東經)或W(西經)
字段7:速度,節,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前導位數不足則補0)
字段11:磁偏角方向,E=東W=西
字段16:校驗值
這里,“*”為校驗和識別符,其后面的兩位數為校驗和,代表了“$”和“*”之間所有字符(不包括這兩個字符)的異或值的十六進制值。上面這條例句的校驗和是十六進制的50,也就是十進制的80。
提示:^運算符的作用是異或。將$和*之間所有的字符做^運算(第一個字符和第二個字符異或,結果再和第三個字符異或,依此類推)之后的值對65536取余后的結果,應該和*后面的兩個十六進制數字的值相等,否則的話說明這條語句在傳輸中發生了錯誤。注意這個十六進制值中是會出現A-F的大寫字母的。
現在,你的程序要讀入一系列GPS輸出,其中包含$GPRMC,也包含其他語句。在數據的最后,有一行單獨的
END
表示數據的結束。
你的程序要從中找出$GPRMC語句,計算校驗和,找出其中校驗正確,並且字段2表示已定位的語句,從中計算出時間,換算成北京時間。一次數據中會包含多條$GPRMC語句,以最后一條語句得到的北京時間作為結果輸出。
你的程序一定會讀到一條有效的$GPRMC語句。
輸入格式:
多條GPS語句,每條均以回車換行結束。最后一行是END三個大寫字母。
輸出格式:
6位數時間,表達為:
hh:mm:ss
其中,hh是兩位數的小時,不足兩位時前面補0;mm是兩位數的分鍾,不足兩位時前面補0;ss是兩位數的秒,不足兩位時前面補0。
輸入樣例:
$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
END
輸出樣例:
10:48:13
#include "stdio.h" #include "string.h" int main() { int i,j,k,sum=0,r,num,t,d; char c[80][100]; char time[9]="00:00:00"; for(i=0;;i++) { gets(c[i]); if(c[i][0]=='E'&&c[i][1]=='N'&&c[i][2]=='D'&&c[i][3]=='\0') { num=i;break; } } for(i=0;i<num;i++) { if(c[i][0]=='$'&&c[i][1]=='G'&&c[i][2]=='P'&&c[i][3]=='R'&&c[i][4]=='M'&&c[i][5]=='C'&&c[i][6]!='\0') { sum=0; for(j=1;c[i][j]!='*';j++) { sum=sum^c[i][j]; } if(c[i][j+1]>='0'&&c[i][j+1]<='9') r=16*(c[i][j+1]-'0'); else r=16*(c[i][j+1]-'A'+10); if(c[i][j+2]>='0'&&c[i][j+2]<='9') r=r+c[i][j+2]-'0'; else r=r+c[i][j+2]-'A'+10; for(k=0;!(c[i][k]=='A'||k=='V');k++) { ; } if(sum==r&&c[i][k]=='A') { time[3]=c[i][9],time[4]=c[i][10],time[6]=c[i][11],time[7]=c[i][12]; t=10*(c[i][7]-'0')+c[i][8]-'0'; t=(t+8)%24; if(t<10) { time[0]='0',time[1]='0'+t; } else { time[1]=(t%10)+'0',time[0]=(t-t%10)/10 + '0'; } } } } for(i=0;i<8;i++) { printf("%c",time[i]); } return 0; }此題有參考討論區的朋友做出的解答,在此給予十分的感謝,同時討論區的同學做出的解答更好些,附上鏈接
討論區地址:
http://mooc.study.163.com/learn/ZJU-1000002011?tid=1000003007#/learn/forumdetail?pid=1000078086點擊打開鏈接