【2309】CIE C/C++二级 代码

1.数组指定部分逆序重放
[描述]
将一个数组中的前k项按逆序重新存放。例如,将数组8,6,5,4,1前3项逆序重放得到5,6,8,4,1。
[输入]
输入为两行: 第一行两个整数,以空格分隔,分别为数组元素的个数n(1 < n < 100)以及指定的k(1 <= k <= n)。 第二行是n个整数,每两个整数之间用空格分隔。

#include <bits/stdc++.h>
using namespace std;
int n,k;
int numArr[101]; 
int main(){
	cin>>n>>k;//写入n和k的值
	for(int i=0;i<n;i++){
		cin>>numArr[i];//写入数组的值 
	}
//	for(int i=0;i<k;i++){
//		if(i==k/2) break;
//		int item = 0;
//		item = numArr[i];
//		numArr[i] = numArr[k-i-1];
//		numArr[k-i-1] = item;
//	}
	reverse(numArr,numArr+k);
	for(int i=0;i<n;i++){
		cout<<numArr[i]<<" ";
	}
	system("pause");
	return 0;
}

2.序列排序
[描述]
对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。
[输入]
第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。

#include <bits/stdc++.h>
using namespace std;
int n;
string numArr[1001];
int sumArr[1001];
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>numArr[i];
		for(int j=0;j<numArr[i].size();j++){
			sumArr[i]+=(numArr[i][j]-'0'); //计算出位数的和并添加到sumArr中 
		}
	}
	for(int i =0;i<n-1;i++){
		for(int j =0;j<n-i-1;j++){
			if(sumArr[j]<=sumArr[j+1]){
				string sitem = numArr[j];
				numArr[j] = numArr[j+1];
				numArr[j+1] = sitem;
				int nitem = sumArr[j];
				sumArr[j]=sumArr[j+1];
				sumArr[j+1] = nitem;
			}
		}
	}
	for(int i =0;i<n;i++){
		cout<<numArr[i]<<" ";
	}
	system("pause");
	return 0;
}

3.内部元素之和
[描述]
输入一个整数矩阵,计算位于矩阵内部的元素之和。所谓矩阵内部的元素,不在第一行和最后一行的元素以及第一列和最后一列的元素。
[输入]
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。 接下来输入的m行数据中,每行包含n个整数(每个数大于等于0,小于1000),整数之间以一个空格分开。

#include <bits/stdc++.h>
using namespace std;
int m,n,sum;
int numArr[101][101];
int main(){
	cin>>m>>n;
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			cin>>numArr[i][j];
		}
	}
	for(int i=1;i<m-1;i++){
		for(int j=1;j<n-1;j++){
			sum+=numArr[i][j];
		}
	}
	cout<<sum<<endl;
	system("pause");
	return 0;
}

4.谁考了第k名
[描述]
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
[输入]
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。 其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。

#include <bits/stdc++.h>
using namespace std;
class Person{
public:
	long long m_Id; //学生编号 
	float m_Score; //学生成绩 
};
Person students[101];
int n,k; 
bool cmp(const Person &a,const Person &b){
	//设置一个排序函数  用应用传递 
	return a.m_Score>b.m_Score;
}
int main(){
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>students[i].m_Id>>students[i].m_Score;
	}
	sort(students,students+n,cmp);
	printf("%lld %g\n",students[k-1].m_Id,students[k-1].m_Score);
//	cout<<students[k-1].m_Id<<" "<<students[k-1].m_Score<<endl;
	system("pause");
	return 0;
}

5.话题焦点人物
[描述]
微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如Lee发出一条微博为:“期末考试顺利 @Kim @Neo”,则Lee提及了Kim和Neo两位用户。 我们收集了N(1 < N < 10000)条微博,并已将其中的用户名提取出来,用小于等于100的正整数表示。 通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(题目保证这样的人有且只有一个),并找出那些提及它的人。
[输入]
输入共两部分: 第一部分是微博数量N,1 < N < 10000。 第二部分是N条微博,每条微博占一行,表示为: 发送者序号a,提及人数k(0 < = k < = 20),然后是k个被提及者序号b1,b2...bk; 其中a和b1,b2...bk均为大于0小于等于100的整数。相邻两个整数之间用单个空格分隔。

#include <bits/stdc++.h>
using namespace std;
int n;
class weiBo{
public:
	int a;//序号
	int k;//提及人数
	int arr[21];  //被提及着序号 
};
weiBo wbArr[10001];
int main(){
	cin>>n;
	for(int i =0;i<n;i++){
		cin>>wbArr[i].a>>wbArr[i].k;
		if(wbArr[i].k!=0){
			for(int j=0;j<wbArr[i].k;j++){
				cin>>wbArr[i].arr[j];
			}
		}
	}
	int a =0;//保存序号最大的下标 
	int maxk = 0;
	for(int i=0;i<n;i++){
		if(maxk<wbArr[i].k){
			maxk = wbArr[i].k;
			a =i;
		}
	}
	cout<<wbArr[a].k<<endl;
	sort(wbArr[a].arr,wbArr[a].arr+a); //排序 
	for(int i=0;i<wbArr[a].k;i++){
		cout<<wbArr[a].arr[i]<<" ";
	}
	system("pause");
	return 0;
}
posted @ 2026-10-15 15:30  谢卿妍  阅读(3)  评论(0)    收藏  举报
🚀