题目很简单,但太久没敲过代码甚至不记得sort函数怎么用。
把姓名,学号,成绩存进结构体里。写一个cmp,就可以对结构体数组按照成绩进行排序。
- #include
- using namespace std;
- const int N=1e5+10;
- struct stud
- {
- string name,num;
- int score;
- }stu[N];
- bool cmp(stud a,stud b)
- {
- return a.score
- }
- signed main()
- {
- int n;
- cin>>n;
- for(int i=1;i<=n;i++)
- {
- cin>>stu[i].name>>stu[i].num>>stu[i].score;
- }
- sort(stu+1,stu+n+1,cmp);
-
- cout<
" "< - cout<
1].name<<" "<1].num; -
- return 0;
- }
1005 继续(3n+1)猜想
这题重点在于理解题目意思,“现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字”。
我开始理解的是要求每个数求解过程中出现的在a数组中的数,后来才发现,题目是要剔除那些在求解一个数过程中出现的数。
比如:
int:6
out:3 5 6 7 8 11
3-》5-》8-》4-》2-》1 因此,5 8被剔除
6-》3-》5-》8-》4-》2-》1 因此,3也被剔除
7-》11-》17-》26-》13-》20-》10-》58-》4-》2-》1 因此,11也被剔除
因而题目只剩下6,7。
- #include
- using namespace std;
- const int N=110;
- set<int> st;
- int ans[N],a[N];
- signed main()
- {
- int n;
- cin>>n;
- for(int i=1;i<=n;i++)
- {
- cin>>a[i];
- if(st.find(a[i])==st.end()) st.insert(a[i]);
- }
- for(int i=1;i<=n;i++)
- {
- int x=a[i];
- while(x!=1)
- {
- if(x%2) x=(3*x+1)/2;
- else x/=2;
-
- if(st.find(x)!=st.end()) st.erase(x);//删除过程中出现的数
- }
- }
- int j=0;
- for(auto i:st) ans[++j]=i;
- for(int i=j;i>=1;i--)
- {
- cout<
- if(i!=1) cout<<" ";
- }
-
- return 0;
- }
1006 换个格式输出整数
这题比较简单。只要注意存的字符串方向就行。
- #include
- using namespace std;
- const int N=110;
-
- signed main()
- {
- string x;
- cin>>x;
- int n=x.length();
- for(int i=0;i<=n-1;i++)
- {
- int p=x[i]-'0';
- for(int j=1;j<=p;j++)
- {
- if((n-i)==3) cout<<"B";
- else if((n-i)==2) cout<<"S";
- else cout<
- }
- }
-
- return 0;
- }
1007 素数对猜想
- #include
- using namespace std;
- const int N=1e5+10;
- int cnt;
- int a[N];
- bool isprime(int x)
- {
- if(x==1) return false;
- for(int i=2;i<=x/i;i++)
- {
- if(x%i==0) return false;
- }
- return true;
- }
- signed main()
- {
- int n,k=0;
- cin>>n;
- for(int i=2;i<=n-2;i++)
- {
- if(isprime(i)&&isprime(i+2))
- {
- cnt++;
- }
- }
- cout<
- return 0;
- }
1008 数组元素循环右移问题
顺还队列的思想。
- #include
- using namespace std;
- const int N=1e5+10;
- int a[N],b[N];
- signed main()
- {
- int n,m;
- cin>>n>>m;
- for(int i=0;i
- {
- cin>>a[i];
- }
- for(int i=0;i
- {
- b[(i+m)%n]=a[i];
- }
- for(int i=0;i
- {
- cout<
- if(i!=n-1) cout<<" ";
- }
- return 0;
- }
1009 说反话
- #include
- using namespace std;
- const int N=1e5+10;
- char g[85][20];
- signed main()
- {
- int i=1;
- while((scanf("%s",g[i++]))!=EOF){
- getchar();
- }
- for(int j=i-2;j>=1;j--)
- {
- cout<
- if(j!=1) cout<<" ";
- }
- return 0;
- }
1010 一元多项式求导
- #include
- using namespace std;
- signed main()
- {
- int x,n;
- scanf("%d %d",&x,&n);
- if(n==0)printf("%d %d",0,0);
- else printf("%d %d",x*n,n-1);
- while(scanf("%d %d",&x,&n)!=EOF)
- {
- if(n!=0)printf(" %d %d",n*x,n-1);
- }
- return 0;
- }
1011 A+B 和 C
题目很简单,复习一下进制。
2的31次方:2147483648。也就是1e9-1e10
int 范围是
-2147483648~2147483647 也就是2的31次方
long long的最大值:9223372036854775807
所以开longlong不会爆
- #include
- using namespace std;
- const int N=1e5+10;
-
- bool solve()
- {
- long long a,b,c;
- cin>>a>>b>>c;
- if(a+b>c) return true;
- else return false;
- }
- signed main()
- {
- int t;
- cin>>t;
- for(int i=1;i<=t;i++)
- {
- if(solve()) cout<<"Case #"<": true"<<"\n";
- else cout<<"Case #"<": false"<<"\n";
- }
-
- return 0;
- }
1012 数字分类
没有思路可言,纯模拟题。
- #include
-
- using namespace std;
-
- int main() {
- //ios::sync_with_stdio(false);
- int n, num;
- int ans[6] = { 0 };
- double A4 = 0.0;
- cin >> n;
- int t = 1;
- bool flag[6] = { false };//判断每个类型的数是否有出现
-
- for (int i = 0; i < n; i++) {
- cin >> num;
- if (num % 10 == 0 ) {
- ans[1] += num;
- flag[1] = true;
- }
- else if (num % 5 == 1) {
- ans[2] = ans[2] + num * t;
- t = -t;
- flag[2] = true;
- }
- else if (num % 5 == 2) {
- ans[3]++;
- flag[3] = true;
- }
- else if (num % 5 == 3) {
- ans[4]++;//统计被5除后余3的数字的个数
- A4 += num;
- flag[4] = true;
- }
- else if (num % 5 == 4) {
- if (ans[5] < num) ans[5] = num;
- flag[5] = true;
- }
- }
-
- for (int i = 1; i < 6; i++) {
- if (i != 1) cout << " ";
- if (!flag[i]) {
- cout << "N";
- }
- else if (i == 4) {
- printf("%.1f", A4 / ans[4]);
- }
- else {
- cout << ans[i];
- }
- }
-
- return 0;
- }
-
1013 数素数
第四个测试点过不了,查到了原因
把范围改到104730以内(因为第10000个素数等于104729),这个数既不爆也包含了第10000个素数
- #include
- using namespace std;
- const int N=1e5+10;
- int a[N];
- bool isprime(int x)
- {
- for(int i=2;i<=x/i;i++)
- {
- if(x%i==0) return false;
- }
- return true;
- }
- signed main()
- {
- int cnt=0,j=0;
- int n,m;
- cin>>n>>m;
- for(int i=1;i<=104730;i++)
- {
- if(isprime(i)) a[j++]=i;
- }
- for(int i=n;i<=m;i++)
- {
- ++cnt;
- if(cnt%10==0) cout<<"\n";
- else if(cnt%10&&i!=m) cout<<" ";
- }
- return 0;
- }
1014 福尔摩斯的约会
- #include
- #include
- using namespace std;
- int main()
- {
- int flag = 0;
- string s1, s2, s3, s4;
- cin >> s1 >> s2 >> s3 >> s4;
- string weight[7] = { "MON","TUE","WED","THU","FRI","SAT","SUN" };
- for (int i = 0; i < s1.size()&&i
size(); i++) - {
- if (flag)
- {
- if (s1[i]<='9'&&s1[i]>='0' && s1[i] == s2[i])
- {
- printf("%02d:", (s1[i] - '0'));
- break;
- }
- else if (s1[i] >= 'A'&&s1[i] <= 'N'&&s1[i] == s2[i])
- {
- printf("%02d:", (s1[i] - 'A' + 10));
- break;
- }
- }
- else if (s1[i] >= 'A'&&s1[i] <= 'G'&&s1[i] && s1[i] == s2[i])
- {
- flag = 1;
- cout << weight[s1[i] - 'A'] << " ";
- }
- }
- for (int i = 0; i < s3.size()&&i
size(); i++) - {
- if(isalpha(s3[i])&&s3[i]==s4[i])
- {
- printf("%02d",i);
- }
- }
- return 0;
- }
1015 德才论
模拟题是真恶心啊,
“,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。”看漏了就只有4分,
另外这题卡cin,cout,因为数据量比较大。加了下面的才能过。
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
- #include
- using namespace std;
- const int N=1e5+10;
- struct stu{
- string num;
- int de,cai;
- int sum;
- }a[N],b[N];
- map
int> mp; - bool cmp2(stu st1,stu st2)
- {
- if(st1.sum!=st2.sum) return st1.sum>st2.sum;
- else if(st1.de!=st2.de) return st1.de>st2.de;
- else return st1.num
- }
- signed main()
- {
- std::ios::sync_with_stdio(false);
- std::cin.tie(nullptr);
- int n,l,h;
- cin>>n>>l>>h;
- int p=0;
- for(int i=1;i<=n;i++)
- {
- cin>>a[i].num>>a[i].de>>a[i].cai;
- a[i].sum=a[i].cai+a[i].de;
- if(a[i].de>=h&&a[i].cai>=h)//德才均不低于优先录取线
- {
- b[++p]=a[i];
- mp[a[i].num]=1;
- }
- }
- sort(b+1,b+p+1,cmp2);
- /*for(int i=1;i<=p;i++)
- {
- cout<
- }*/
- int q=p;
- for(int i=1;i<=n;i++)
- {
- if(a[i].de
continue; - if(a[i].de>=h&&a[i].cai
//才分不到但德分到优先录取线 - {
- b[++q]=a[i];
- mp[a[i].num]=1;
- }
- }
- sort(b+p+1,b+q+1,cmp2);
-
- int j=q;
- for(int i=1;i<=n;i++)
- {
- if(a[i].de
continue; - if(a[i].de
=a[i].cai&&!mp[a[i].num]) - {
- b[++j]=a[i]; //德才分均低于 H,但是德分不低于才分的考生
- mp[a[i].num]=1;
- }
- }
- sort(b+q+1,b+j+1,cmp2);
- int t=j;
- for(int i=1;i<=n;i++)
- {//其他达到最低线 L 的考生也按总分排序,但排在第三类考生之后。
- if(a[i].de
continue; - if(!mp[a[i].num])
- {
- b[++t]=a[i];
- }
- }
- sort(b+j+1,b+t+1,cmp2);
-
- cout<
- for(int i=1;i<=t;i++)
- {
- cout<" "<" "<
- }
- return 0;
- }
-
相关阅读:
前端相关题目随笔
一个比 ping 更强大、更牛逼的命令行工具
RTOS任务调度过程(上下文切换)
Zookeeper部署运行_集群安装
芒果改进目录一览|改进YOLOv5、YOLOv7等YOLO模型全系列目录
信息系统集成专业技术知识
Java - Gson和Fastjson如何选择?
Jupyter的安装
a16z公布AI产品流量排名,ChatGPT占据榜首
Oracle/PLSQL: Acos Function
-
原文地址:https://blog.csdn.net/m0_74183164/article/details/132922601