標籤:temp 表情 3.2 amp tps bre [1] 計數 while
7-3 出生年:1. 本題PTA提交列表:
2. 設計思路:
定義控制變數i,j,k,年份year,不同數字個數n,年份取代值digit,統計相同個數變數same;用sum=year+i;累加年份,用digit記錄sum的值digit=sum;count=digit%10;a[j]=count;digit=digit/10,存放每個位的數字,對sum重新賦值same=0;將a[i]遍曆數組,即嵌套迴圈for(k=0;k<4;k++)for(j=k+1;j<4;j++)如果(a[k]==a[j])則same++;
如果(same==1&&n==3)break;
如果((same==3||same==2)&&n==2)break;
如果(same==0&&n==4)break;
如果(same==6&&n==0)break;
輸出i的值;
用迴圈for(j=3;j>=0;j--)依次逆序輸出年份;
3.代碼:
4.本題調試過程碰到問題及PTA提交列表情況說明:
1.一開始沒注意到迴圈條件的自相矛盾,寫成for(i=0;i>=0;i++),導致怎麼也進不了迴圈內,後來在同學和老師協助下改正;
2.把digit=digit/10寫成count=count/10;
3.後來提交PTA時,發現n=2時錯誤,自己怎麼也弄不懂為什麼錯,因為答案輸出和sample一樣,在同學協助下終於知道了自己少寫了一種情況,即same=2時,剛好也有兩個不同的情況,而自己只考慮了3個相同時2個不同的情況,這是考慮問題不周全引發的錯誤;
7-2 求整數序列中出現次數最多的數:1. 本題PTA提交列表:
2. 設計思路:
定義控制變數i,j,max存放最大值,,n為輸入整數的個數,a[1000]存放整數,count2存放出現次數最多的數,count1統計統計每個整數出現的次數;
輸入n,scanf("%d",&n);
迴圈輸入整數存入數組a[1000],for(j=0;j<n;j++)scanf("%d",&a[j]);
令最大值為a[0],max=a[0];
for(i=0;i<n;i++) 令count1=0;
統計出現次數最多的數
for(j=0;j<n;j++)
如果(a[i]==a[j])則count1++;
如果(j==(n-1)&&count1>count2)則 count2=count1;max=a[i];
輸出"%d %d",max,count2”;
3.代碼:
4.本題調試過程碰到問題及PTA提交列表情況說明。
1.一開始把統計次數的迴圈for(j=0;j<n;j++)寫成for(j=i+1;j<n;j++),調試發現這樣會使得統計數本身沒有統計到,開始時以為乾脆把每個數都從頭到尾統計一遍就行,現在發現了一種更高效的做法,即寫成for(j=i;j<n;j++),這樣的話雖然不是每個數都會被完整統計一遍出現次數,只有那個數在出現第一次時才會完整統計個數,但依然可以得出出現次數最多的數
2.如果條件滿足(j==(n-1)&&count1>count2),則 max=a[i];而不是max=a[j];a[i]才是拿來比較的那個數,a[j]是用來將數組遍曆一遍的數;
7-6 閱覽室:1. 本題PTA提交列表:
2. 設計思路:
定義time1[1001],time2[10]={0},time1存放初借書數間,time2存放不同天數借書的總時間,將time2的元素全歸0;
定義count[10]={0},day,i=0,book=1,其中count統計不同天借閱總次數;
定義h和m,記錄時間的時和分;定義ch;
輸入day;
while(i<day)
輸入("%d %c %d:%d",&book,&ch,&h,&m);
如果(ch==‘S‘&&book!=0)則time1[book]=h60+m;這是記錄不同書號開始借的時間
如果(ch==‘E‘&&book!=0&&time1[book]!=0)則time2[i]=time2[i]+h60+m-time1[book]; count[i]++;當天借閱時間總和;
當book!=0時執行以上迴圈;
i++;
for(i=0;i<day;i++)
如果(count[i]==0)輸出"%d %d\n",count[i],0;
否則輸出"%d %0.f\n",count[i],time2[i]*1.0/count[i];
3.代碼:
4.本題調試過程碰到問題及PTA提交列表情況說明。
三、同學代碼結對互評
李琴的代碼:
My Code:
1.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?
1.這題是7-4 簡化的插入排序,My Code主要是設定了兩個數組,用數組a重新排列後給數組b賦值,而李琴的代碼主要是插入排序法,我覺得她的代碼比較簡潔,但是不大容易理解,My Code相對複雜,但可能更容易理解,但還是比較喜歡簡潔的風格;
四、本周學習總結:
1.1 C中如何儲存字串?
儲存方式和數組差不多,都是一個字元對應一個儲存單元,最後一個一定是0;
- 1.2 字串的結束標誌是什麼,為什麼要結束標誌?
是‘\0’,因為對字元數組的操作只能針對有效字元和字串結束符,所以需要通過檢測字串結束符來判斷是否結束對字元的操作;
- 1.3 字串輸入有哪幾種方法?
方法一:char str[80]="HAPPY";
方法二:s[0]=‘a‘;s[1]=‘\0‘;
方法三:while((str(i)=getchar())!=‘\n‘)i++;str[i]=‘\0‘;
- 1.4 數字字元怎麼轉整數,寫個虛擬碼?
number=number*16+hexad[i]-‘0‘;
1.5 16進位、二進位字串如何轉10進位?寫虛擬碼?
if(s[i]>=‘A‘&&s[i]<=‘F‘)
n=s[i]-‘A‘+10;
else if(s[i]>=‘a‘&&s[i]<=‘f‘)
n=s[i]-‘a‘+10;
else n=s[i]-‘0‘;
temp=temp*16+n;
2.本周的內容,你還不會什嗎?
詳細羅列不明白地方,包括課堂派錯題、PTA錯題。
3.期中考試小結
3.1 你認為為什麼沒考好?
3.2 羅列錯題。
請在選擇題、填空題、改錯題、編程題分別舉一題說明為什麼錯了,怎麼改?
3.3 下半學期要怎麼調整C的學習?
C語言部落格作業--一二維數組