pta(刷题总结)
總結題目如下
- 1.3n+1猜想
- 2.我要通過
- 3.成績排名
- 4,.換個格式輸出
- 5.素數對猜想
- 6.數組元素的循環右移動
- 7.說反話
- 8.一元多項式求導
- 9.A+B和C
- 10.數字分類
- 11.數素數
- 12.部分A+B
- 13.A除以B
- 14.錘子剪刀布
- 15.個位數的統計
那么將這幾個分為幾個大類 :
分析開始嘍!
1.字符串的使用 (個人不擅長,所以要分析多一點)
?面對自讀串的處理的時候,一般分為幾類:字符串的輸入,判斷,移動,找出某一字符的出現次數。
那比如輸入限定的字符串
//這個是連貫的字符串哈 char arr[100]scanf("%s",arr);len=strlen(arr); //運用到了庫函數#include <string.h>for(i=0;i<len;i++) //這個可以得到某個的字符的那個其實還要注意一點的是在輸入的時候,因為空格也是會影響的 所以getchar()少不了的 其實那個gets(數組名) 和 puts(數組名)的使用也能取得很好地效果while(scanf("%s",word[i++])&&(getchar()!='\n')); //一段話的輸入2.結構體的運用
其實談到結構體,我感覺這個東西真的很有趣味,因為你可以按照自己的想法來定義一個類型,在你的結構體里有不同的類型,整型 浮點 雙精度....只要你想你就可以實現,其實還有一個較好的就是那個在學籍管理系統中,當你設計的了姓名,班級跟隨著你的那個成績來進行排序的時候,我感覺結構體才是yyds,因為你用數組來進行排序的過程中,你要涉及到多個同時都動,然后就寫一大堆,但是結構體不一樣的感覺。
#include <stdio.h> #define N 100 struct stu{char name[20];char class[100];int sore;}; //加入一個結構體,全局的 int main(void) {int i,n;struct stu s[N]; //說明這是一個結構體數組scanf("%d",&n); //這個是為了輸入學生的個數for(i=0;i<n;i++){ //輸入scanf("%s%s%d",s[i].name,s[i].class,&s[i].sore);} //. 是為了針對某一元素的//來進行比較成績int max = 100; //用開始的值是最大值也是最小值int min = 0;int b1,b2;for(i=0;i<n;i++){if(max < s[i].sore) {max = s[i].sore; //記住下標,為了輸出b1 = i;}if(min > s[i].sore) {min = s[i].sore; //記住下標,為了輸出b2 = i;}}//兩次輸出printf("%s %s\n",s[b1].name,s[b1].class);printf("%s %s\n",s[b2].name, s[b2].class);return 0; } //這個是德才論的比較if (a.class != b.class)return a.class < b.class; //如果考生檔次不同,按照檔次從高到低(1~5)排序else if (a.sum != b.sum)return a.sum > b.sum; //如果考生檔次相同,按照總分從高到低排序else if (a.de_s != b.de_s)return a.de_s > b.de_s; //如果考生分數相同,按照德行分從高到低排序elsereturn strcmp(a.num, b.num) < 0; 也是在此用到了結構體?3.精確到某一位的使用
對應的題型:水仙花數。。。。
//方法一,但是對于位數較少的 int num;int t1,t2,t3;scanf("%d",&num);t1=num / 100; //百位t2= (num / 10)% 10; // 十位t3= num %10; //個位 //很多位數都行 x1 是你輸入的數哈 while(x1>0){a=x1%10;x1=x1/10;if(a==y1){n1++; }} //這個是對每一位數字的統計 for (i=0;i<strlen(b);i++){a[b[i]-'0']++;}for (i=0;i<10;i++){if(a[i]!=0){printf("%d:%d\n",i,a[i]);}?4.末尾空格的處理方式(賊妙)
for (i = 0; i < limit; i++) {if (i == 0) printf("%d", arr[i]);else printf(" %d", arr[i]);} //這個是直接給他另起一個if語句if(count2 % 10 == 1)printf("%d", i); //最后沒有空格else printf(" %d", i);其實還可以用哪個比較的方法 ,就是添加一個 ? 如果是的話執行A,否則執行B5. 感覺不錯的: 循環右移動
?
?
?但是我當時用的不是這個方法,我就是傻傻的將其搞到數組里,然后在傻傻的移動
感覺不錯的代碼
//這個是說反話的核心代碼,我感覺那個博主真的很nice while(scanf("%s",word[i++])&&(getchar()!='\n'));while(--i)printf("%s ",word[i]);printf("%s",word[0]); //大數相除的核心代碼 scanf("%s %d", s, &b);len = strlen(s);t = (s[0]-'0')/b;if((t!=0 && len>1) || len==1)printf("%d", t);temp = (s[0]-'0')%b;for(i=1; i<len; i++){t = (temp*10+s[i]-'0')/b;printf("%d",t);temp = (temp*10+s[i]-'0')%b;} //這個是部分A+B的那個 //是關于相同的然后多個數字就是如666 888 11111 相同的幾位 這個騷操作真的騷 for(i=1;i<=n1;i++){b=b*10+y1;}for(i=1;i<=n2;i++){c=c*10+y2;}?
好了,就分享到這吧,有一點用,反正咱也不是特別聰明,多看看大神的騷操作,真的很nice
??
總結
- 上一篇: 全球及中国创新药产业研发格局及应用价值分
- 下一篇: android psp 模拟器卡,手机P