PTA基础编程题目集(二)(输入带空格字符串,字符数组、7-28 猴子选大王(*)、7-30 字符串的冒泡排序、7-31 字符串循环左移 、7-1 厘米换算英尺英寸、7-35 有理数均值(*))
7-28 猴子选大王 (20分)
https://pintia.cn/problem-sets/14/problems/808
题意:n个猴子围成圈,从1到3循环报数,为3就退出直到只剩最后一个猴子,输出该猴子初序;
思路:模拟题,数组存储,对数组1~3循环编号,同时k从1递增,逢4变1,数组编号逢3变0,同时计数值count--,直到count==1退出while循环,输出该值初序;
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <cstdio> #include <iostream> #include <cmath> #include <algorithm> using namespace std; int main() { int array[1010]={0}; int n,i; int k=1; cin>>n; int count=n; for (i=1;i<=n;i++) array[i]=i; while (count>1) { for (i=1;i<=n;i++) { if (array[i]!=0){ array[i]=k; k++; } if (k==4) k=1; if (array[i]==3) { array[i]=0; count--; } } } for (i=1;i<=n;i++) { if (array[i]!=0) cout<<i<<endl; } return 0; } |
7-30 字符串的冒泡排序 (20分)
https://pintia.cn/problem-sets/14/problems/810
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <cstdio> #include <cstring> #include <string> #include <iostream> #include <algorithm> #include <cmath> using namespace std; int main() { int n,k; char chr[110][13]; char chr2[13]; //string chr[110]; int i,j; cin>>n>>k; for (i=0;i<n;i++) cin>>chr[i]; for (i=0;i<k;i++) { for (j=0;j<n-1;j++) { if ( strcmp (chr[j],chr[j+1])>0) { strcpy (chr2,chr[j]); strcpy (chr[j],chr[j+1]); strcpy (chr[j+1],chr2); } } } for (i=0;i<n;i++) cout<<chr[i]<<endl; return 0; } |
7-31 字符串循环左移 (20分)
https://pintia.cn/problem-sets/14/problems/811
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <cstdio> #include <iostream> #include <cstring> #include <string> using namespace std; int main() { char chr[210]; int n; int i,j,k; //gets(chr); cin.getline(chr,210); // cin>>n; int len= strlen (chr); int s=n%(len); for (i=len,j=0;i<len+s;i++,j++) { chr[i]=chr[j]; } for (i=s;i<len+s;i++) cout<<chr[i]; cout<<endl; return 0; } |
ps:如何输入带空格字符串 https://www.cnblogs.com/houchen/p/10356396.html
7-1 厘米换算英尺英寸 (15分)
https://pintia.cn/problem-sets/14/problems/781
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; int main() { int foot,inch; int c; cin>>c; foot=c/100.0/0.3048; inch=(c/100.0/0.3048-foot)*12; cout<<foot<< " " <<inch<<endl; return 0; } |
7-35 有理数均值 (20分)
https://pintia.cn/problem-sets/14/problems/815
思路:第一次提交只得了18分,最后一个测试点没过,报浮点错误,然后加了下面两段代码就过了;
1 2 3 4 | if (n==1&&a[1]==0) { cout<< "0" <<endl; return 0; } |
1 2 3 4 | if (value3==0){ cout<< "0" <<endl; return 0; } |
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <algorithm> #include <iostream> using namespace std; int gcd( int a, int b) { return b==0?a:gcd(b,a%b); } int main() { int a[110],b[110]; int n; int i,j,k; cin>>n; int value1,value2=1,value3=0; int value4,value5; for (i=1;i<=n;i++) scanf ( "%d/%d" ,&a[i],&b[i]); if (n==1&&a[1]==0) { cout<< "0" <<endl; return 0; } for (i=1;i<=n;i++){ //scanf("%lld/%lld",&a[i],&b[i]); if (b[i]==0) { n--; continue ; } int x=a[i],y=b[i]; a[i]=x/gcd(x,y); b[i]=y/gcd(x,y); value2*=b[i]; } value2*=n; for (i=1;i<=n;i++) { value1=1; for (j=1;j<=n;j++) { if (j!=i) value1*=b[j]; else value1*=a[i]; } value3+=value1; } if (value3==0){ cout<< "0" <<endl; return 0; } value4=value3/gcd(value3,value2); value5=value2/gcd(value3,value2); if (value5==1) cout<<value4<<endl; else cout<<value4<< "/" <<value5<<endl; return 0; } |
天晴了,起飞吧
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步