7-1 判断素数 (10分)
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes
,否则输出No
。
(原来1不是质数来着QWQ)
#include <bits/stdc++.h> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { long long k,a,i; cin>>k; while(k--) { cin>>a; if(a==2) { cout<<"Yes"<<endl; }else if(a==1){ cout<<"No"<<endl; } else { int flag=0; for(i=2; i*i<=a+1; i++) { if(a%i==0) { cout<<"No"<<endl; flag=1; break; } } if(flag==0) { cout<<"Yes"<<endl; } } } return 0; }
7-2 寻找250 (10分)
在一行中输出第一次出现的“250”是对方扔过来的第几个数字
#include <bits/stdc++.h> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int i=0,a; while(cin>>a){ i++; if(a==250){ cout<<i<<endl; break; } } return 0; }
7-3 幸运彩票 (15分)
6位数,如果前三位之和等于后三位,这个数就是幸运的
#include <bits/stdc++.h> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int k; cin>>k; while(k--){ string s; cin>>s; if(s[0]+s[1]+s[2]==s[3]+s[4]+s[5]){ cout<<"You are lucky!"<<endl; }else{ cout<<"Wish you good luck."<<endl; } } return 0; }
7-4 出生年 (15分)
输入在一行中给出出生年份y
和目标年份中不同数字的个数n
,其中y
在[1, 3000]之间,n
可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。
根据输入,输出x
和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n
个数字都不相同”是指不同的数字正好是n
个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。
写一个函数判断这个四位数有几位相同,从给定年份循环+1判断,最早满足条件的年份
#include <bits/stdc++.h> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int same(int n) { int a[4]; a[0]=n%10; n=n/10; a[1]=n%10; n=n/10; a[2]=n%10; n=n/10; a[3]=n%10; sort(a,a+4); int flag=1; for(int i=1; i<4; i++) { if(a[i]!=a[i-1]){ flag++; } } return flag; } int main() { int y,n,x,i; cin>>y>>n; x=y; i=0; while(same(x)!=n){ x++; i++; } printf("%d %04d",i,x); return 0; }
7-5 敲笨钟 (20分)
对每一行诗句,判断其是否压“ong”韵。即判断‘,’‘。’前的是不是ong。
如果是压此韵的,将最后三个拼音改成 “敲笨钟”,即替换倒数第三个空格后的内容
否则输出 Skipped
,即跳过此句。
#include <bits/stdc++.h> #include<algorithm> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int k,i; cin>>k; getchar(); while(k--) { string s; getline(cin,s); //cout<<s<<endl; int flag=0; for(i=0; i<s.length(); i++) { if(s[i]==‘,‘) { if(s[i-1]==‘g‘&&s[i-2]==‘n‘&&s[i-3]==‘o‘) { flag++; } } if(s[i]==‘.‘) { if(s[i-1]==‘g‘&&s[i-2]==‘n‘&&s[i-3]==‘o‘) { flag++; } } } if(flag!=2) { cout<<"Skipped"<<endl; } else { int flag=0; for(i=s.length()-1;i>=0;i--){ if(s[i]==‘ ‘){ flag++; } s[i]=‘\0‘; if(flag==3){ //cout<<" qiao ben zhong."<<endl; break; } } for(i=0;i<s.length();i++){ if(s[i]!=‘\0‘) cout<<s[i]; } cout<<" qiao ben zhong."<<endl; } } return 0; }
7-6 日期格式化 (5分)
在一行中按照“mm-dd-yyyy”的格式给出月、日、年,按“yyyy-mm-dd”的格式输出
#include <bits/stdc++.h> using namespace std; int main() { int a,b,c; scanf("%d-%d-%d",&a,&b,&c); printf("%d-%02d-%02d\n",c,a,b); return 0; }
7-7 A-B (20分)
从字符串A中把字符串B所包含的字符全删掉,输出删除之后的结果
#include <bits/stdc++.h> #include<algorithm> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { string a,b; int i,j; getline(cin,a); getline(cin,b); for(i=0;i<b.length();i++){ for(j=0;j<a.length();j++){ if(a[j]==b[i]){ a[j]=‘\0‘; } } } for(i=0;i<a.length();i++){ if(a[i]!=‘\0‘) cout<<a[i]; } cout<<endl; return 0; }
7-8 计算指数 (5分)
计算2^n
#include <bits/stdc++.h> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int n,sum,i; cin>>n; cout<<2<<"^"<<n<<" = "<<pow(2,n)<<endl; return 0; }
7-10 抢红包 (25分)
n个人轮流发红包,其他人抢,按照收入金额从高到低的递减顺序输出每个人的编号和收入金额。每个人的信息占一行,两数字间有1个空格。如果收入金额有并列,则按抢到红包的个数递减输出;如果还有并列,则按个人编号递增输出。
#include <bits/stdc++.h> #include<algorithm> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; struct people{ int no=0; int money=0; int num=0; }a[10010],temp; bool cmp(people s,people b){ if(s.money>b.money){ return 1; }else if(s.money==b.money &&s.num>b.num){ return 1; }else if(s.money==b.money &&s.num==b.num &&s.no<b.no){ return 1; } return 0; } int main() { int n,i,j,k; cin>>n; for(i=0;i<n;i++){ a[i+1].no=i+1; } for(i=1;i<=n;i++){ cin>>k; int no,money; for(j=0;j<k;j++){ cin>>no>>money; a[no].money+=money; a[no].num++; a[i].money-=money; } } sort(a+1,a+n+1,cmp); for(i=1;i<=n;i++){ printf("%d %.2f\n",a[i].no,a[i].money/100.0); //cout<<a[i].no<<" "<<a[i].money/100.0<<endl; } return 0; }
学生互评作业的简单规则是这样定的:每个人的作业会被k
个同学评审,得到k
个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,按非递减顺序输出最后得分最高的M
个成绩
#include <bits/stdc++.h> #include<algorithm> #define p123 printf("123\n"); #define pn printf("\n"); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int n,k,m,i,j; double sum,a[10010],b[15],m1,m2,m3; cin>>n>>k>>m; for(i=0;i<n;i++){ sum=0; for(j=0;j<k;j++){ scanf("%lf",&b[j]); //cin>>b[j]; sum+=b[j]; } sort(b,b+k); sum-=b[0]+b[k-1]; a[i]=sum/(k-2); //cout<<a[i]<<endl; } sort(a,a+n); for(i=n-m;i<n;i++){ if(i!=n-1){ printf("%.3f ",a[i]); }else{ printf("%.3f",a[i]); } } printf("\n"); return 0; }
7-9 小字辈 (25分)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。
输入在第一行给出家族人口总数 N,家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。
首先输出最小的辈分。然后在第二行按递增顺序输出辈分最小的成员的编号。
参考大佬代码:
#include<iostream> #include<vector> #include<algorithm> using namespace std; vector<int>v[100005],ans; vector<int>::iterator it; int maxd; void dfs(int n,int deep) { int i; for (i=0;i<v[n].size();i++) dfs(v[n][i],deep+1); if (deep>maxd) { maxd=deep; ans.clear(); ans.push_back(n); } else if (maxd==deep) ans.push_back(n); } int main() { int n,i,t,pos; cin>>n; for (i=1;i<=n;i++) { cin>>t; if (t==-1) { pos=i; continue; } v[t].push_back(i); } dfs(pos,1); sort(ans.begin(),ans.end()); cout<<maxd<<endl; cout<<*ans.begin(); for (it=ans.begin()+1;it!=ans.end();it++) cout<<‘ ‘<<*it; cout<<endl; return 0; }
原文:https://www.cnblogs.com/a-specter/p/13874644.html