C++ 实验四

编程题1

题目描述
编程序,实现如下功能:
(1)定义两个一维数组x,y,不超过50个元素。
(2)从键盘输入k个整数到数组x中。
(3)计算x中数据的平均值ave及大于平均值的元素个数n并输出。
(4)将数组x中数据复制到数组y中,重复的数据只存储一次,最后输出y中的数据

输入
输入两行,第一行为输入的数据个数,第二行若干整数,每个整数后面有一个空格用于分隔

输出
第一行先输出平均值,再输出大于平均值的元素个数,最后一个空格后换行;
第二行若干整数,每个整数后面有一个空格,最后一个空格后不需要换行;

样例输入
6
6 3 4 3 2 9
样例输出
4.5 2
6 3 4 2 9
#include <iostream>
using namespace std;
int main(){
	int a[50],b[50];
	double sum = 0,aver;
	int n,count = 0,m = 0;
	cin>>n;
	bool s;
	for(int i = 0;i<n;i++){
		cin>>a[i];
	}
	for(int i = 0;i<n;i++){
		sum += a[i];
	}
	aver = sum/n;
	for(int i = 0;i<n;i++){
		if(a[i]>aver)
		count++;
	}
	cout<<aver<<" "<<count<<endl;
	for(int i = n-1;i>=0;i--){
		s = true;
		for(int j = i-1;j>=0;j--)
			if(a[i]==a[j]){
				s = false;
				break;
			}
		if(s){
			b[m++] = a[i];
		}
	}
	for(int i = m-1;i>=0;i--){
		cout<<b[i]<<" ";
	}
	return 0;
}

编程题2

题目描述
有 12 人围坐成一圈玩报数游戏,从1号人员开始顺时针报数,报到k的人员被淘汰出局;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从 1 开始报数,报到 k的人被淘汰;如此继续,直到最后只剩下一个人时停止。请编写程序输出最后所剩那个人的编号。
注意:(1)假设参加游戏的人的编号沿顺时针方向依次为 1 到 12,可以使用数组来存放各数据;
(2)k>1,由用户通过 cin 输入指定

输入
输入一个整数,代表报数值

输出
输出一个整数,即最后剩下的人的编号

样例输入
3
样例输出
10
#include <iostream>
using namespace std;
bool s[13];
int main(){
	int t,n;
	int m;
	cin>>m;
	t = 1;
	n = 0;
	int count = 12;
	while(1){
		if(!s[t]){
			n++; 
			if(n%m == 0){
				s[t] = true;
				n = 0;
				count--;
			}
		}
		t++;
		if(t == 13)
		t = 1;
		if(count == 1){
			while(s[t]){
				t++;
				if(t == 13)
				t = 1;
			}
			cout<<t;
			break;
		}
	}
	return 0;
}

编程题3

题目描述
小宗想知道两个日期之间所间隔的天数,他希望有一个日期计算器,输入两个日期后能够自动计算之间的天数。要求:设计相应的函数完成天数的计算,在主函数中验证正确性

输入
按照年月日的顺序输入两个日期,年月日之间用一个空格分隔

输出
输出两个日期之间的天数,即一个整数,整数后不需要换行

样例输入
2016 3 6
2017 1 1
样例输出
301
#include <iostream>
using namespace std;
bool func(int m){
	bool s = false;
	if(m%400 == 0||m%4 == 0&&m%100!=0)
	s = true;
	return s;
}
int main(){
	int d1[3],d2[3];
	int sum = 0,total;
	int n1 = 0;int n2 = 0;
	for(int i = 0;i<3;i++){
		cin>>d1[i];
	}
	for(int i = 0;i<3;i++){
		cin>>d2[i];
	}
	int m1[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
	int m2[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
	if(d1[0]%400 == 0||d1[0]%4 == 0&&d1[0]%100 != 0)
	m1[1] = 29;
	if(d2[0]%400 == 0||d2[0]%4 == 0&&d2[0]%100 != 0)
	m2[1] = 29;
	for(int i = d1[0];i<d2[0];i++){
		if(func(i))
		sum += 366;
		else
		sum += 365;
	}
	for(int i = 0;i<d1[1]-1;i++){
		n1 += m1[i]; 
	}
	for(int i = 0;i<d2[1]-1;i++){
		n2 += m2[i];
	}
	total = sum+n2-n1+d2[2]-d1[2];
	cout<<total;
	return 0;
}

编程题4

题目描述
对于整型数组a[10]和b[10],编制程序完成下列任务:
(1)由用户从键盘为两个数组输入值;
(2)求出两个数组的最大值和最小值;
(3)把数组a和b中的整数分别从小到大和从大到小排序;
(4)把两个有序的数组a和b组成一个长度为20的有序数组c[20],使数组c的顺序为从小到大

输入
输入两行整数,每行10个,第一行是数组a里的数组,第二行是数组b里的数值

输出
输出五行,第一行有两个整数,分别是数组a的最大值和最小值,两个整数之间用一个空格分隔;
第二行有两个整数,分别是数组b的最大值和最小值,两个整数之间用一个空格分隔;
第三行按照从小到大的顺序输出数组a里的数值,每个数字后面有一个空格,最后一个数字后面也有空格;
第四行按照从大到小的顺序输出数组b里的数值,每个数字后面有一个空格,最后一个数字后面也有空格;
第五行按照从小到大的顺序输出合并后数组c里的数值,每个数字后面有一个空格,最后一个数字后面也有空格

样例输入
2 5 9 1 3 4 0 6 7 8
10 5 25 9 6 3 7 1 2 13
样例输出
9 0 
25 1 
0 1 2 3 4 5 6 7 8 9 
25 13 10 9 7 6 5 3 2 1
0 1 1 2 2 3 3 4 5 5 6 6 7 7 8 9 9 10 13 25
#include <iostream>
using namespace std;
void sort1(int *a,int m){
	for(int i = 0;i<m-1;i++){
		for(int j = 0;j<m-1-i;j++){
			if(a[j]>a[j+1]){
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp; 
			}
		}
	}
}
void sort2(int *a,int m){
	for(int i = 0;i<m-1;i++){
		for(int j = 0;j<m-1-i;j++){
			if(a[j]<a[j+1]){
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp; 
			}
		}
	}
}
void input(int *p,int m){
	for(int i = 0;i<m;i++)
	cout<<p[i]<<" ";
}
int main(){
	int a[10],b[10],c[20],d[10];
	for(int i = 0;i<10;i++){
		cin>>a[i];
	}
	for(int i = 0;i<10;i++){
		cin>>b[i];
	}
	for(int i = 0;i<10;i++){
		d[i] = b[i];
	}
	int min1 = a[0];int max1 = a[0];
	int min2 = b[0];int max2 = b[0];
	for(int i = 0;i<10;i++){
		if(a[i]>max1)
		max1 = a[i];
		if(a[i]<min1)
		min1 = a[i];
	}
	for(int i = 0;i<10;i++){
		if(b[i]>max2)
		max2 = b[i];
		if(b[i]<min2)
		min2 = b[i];
	}
	cout<<max1<<" "<<min1<<endl;
	cout<<max2<<" "<<min2<<endl;
	sort1(a,10);
	sort2(b,10);
	sort1(d,10);
	int m = 0;int n = 0;int p = 0;
	while(m<10&&n<10){
		if(a[m]<d[n])
		c[p++] = a[m++];
		else
		c[p++] = d[n++];
	}
	while(m<10)c[p++] = a[m++];
	while(n<10)c[p++] = d[n++];
	input(a,10);
	cout<<endl;
	input(b,10);
	cout<<endl;
	input(c,20);
	return 0;
} 

编程题5

题目描述
利用cin.getline()函数从键盘录入一句英文,其中每个单词之间用一个空格隔开,最后用’.'结束。统计该句话中单词的个数,并依次输出每个单词。输出个数后换行,输出每个单词后也换行。注意:在本平台下,cin.getline()函数的使用方式如下:
char s[50];
cin.getline(s,50); //最多存储49个字符

输入
输入一句英文,其中每个单词之间用一个空格隔开,最后一个单词后面用英文的’.'作为结束

输出
输出每个单词后换行,最后一行输出单词的数量

样例输入
I like juice.
样例输出
I
like
juice
3
#include <iostream>
using namespace std;
int main(){
	char s[50];
	cin.getline(s,50);
	int i = 0;
	int count = 1;
	while(s[i]!='.'){
		if(s[i] == ' ')
		count++;
		i++;
	}
	i = 0;
	while(s[i]!='.'){
	if(s[i]!=' ')
	cout<<s[i];
	else
	cout<<endl;
	i++;
	} 
	cout<<endl;
	cout<<count;
	return 0;
}

编程题6

题目描述
完数是指一个自然数的所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如,6=1+2+3,所以6是完数。

输入
输入1个正整数n

输出
输出1~n之间的所有完数,各个数之间有1个空格

样例输入
100
样例输出
6 28
#include <iostream>
using namespace std;
bool func(int m){
	bool s = false;
	int sum = 0;
	for(int i = 1;i<m;i++){
		if(m%i == 0)
		sum += i;
	}
	if(sum == m)
	s = true;
	return s;
}
int main(){
	int n;
	cin>>n;
	for(int i = 6;i<n;i++){
		if(func(i))
		cout<<i<<" ";
	}
	return 0;
}

编程题7

题目描述
有两个数组a和b,各有10个元素,将它们对应的逐个比较(即a[0]与b[0]比,a[1]与b[1]比,余此类推)。如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素大于a数组中相应元素的数目(例如a[i]>b[i]6次,而b[i]>a[i]3次),则判定a数组大于b数组。
请写一个程序判断a数组和b数组的大小关系,并统计出两个数组对应元素大于、等于、小于的次数。

输入
有两行,每一行有10个用空格隔开的整数,表示a数组和b数组。

输出
首先在第一行内输出a数组中元素与b数组中对应元素的大于、等于、小于的次数,用空格隔开。
若a数组大于b数组,则在第二行中输出“a>b”;若a数组小于b数组,则输出“a<b”;若两个数组相等,则输出“a=b”。
请注意不需要输出引号,并请注意行尾输出换行。

样例输入
1 3 5 7 9 8 6 4 2 0
5 3 8 9 -1 -3 5 6 0 4
样例输出
4 1 5
a<b
#include <iostream>
using namespace std;
int main(){
	int count1 = 0;
	int count2 = 0;
	int count3 = 0;
	int a[10],b[10];
	for(int i = 0;i<10;i++){
		cin>>a[i];
	}
	for(int j = 0;j<10;j++){
		cin>>b[j];
	}
	for(int i = 0;i<10;i++){
		if(a[i]>b[i])
		count1++;
		else if(a[i]<b[i])
		count2++;
		else
		count3++;
	}
	cout<<count1<<" "<<count2<<" "<<count3<<endl;
	if(count1>count2)
	cout<<"a>b";
	else if(count1<count2)
	cout<<"a<b";
	else
	cout<<"a=b";
	return 0;
}

编程题8

题目描述
求一个n×n的整型矩阵从左上角至右下角的对角线元素之和。

输入
第一行有一个正整数n,保证n不超过10。
共有n行,每行有n个用空格隔开的整数。

输出
输出n×n矩阵的左上角至右下角的对角线元素之和。
请注意行尾输出换行。

样例输入
3
3 6 8
10 2 3
7 1 9
样例输出
14
#include <iostream>
using namespace std;
int main(){
	int a[10][10];
	int n;
	int sum = 0;
	cin>>n;
	for(int i = 0;i<n;i++){
		for(int j = 0;j<n;j++){
			cin>>a[i][j];
		}
	}
	for(int i = 0;i<n;i++){
		for(int j = 0;j<n;j++){
			if(i == j){
				sum += a[i][j];
			}
		}
	}
	cout<<sum;
	return 0; 
} 

编程题9

题目描述
给定一个从小到大有序的整数序列,将其保存至数组。另外输入一个整数,将其插入至这个数组中并保持数组有序。

输入
第一行有一个正整数n,表示原始的整数序列长度为n,保证n不超过50。
第二行有n个整数,表示原始的整数序列,保证这个序列是从小到大给出的。
第三行有一个整数,表示需要插入的整数。

输出
在一行中输出n+1个整数,表示完成插入的整数序列。每个整数后输出一个空格。
请注意行尾输出换行。

样例输入
10
1 2 3 4 5 6 7 9 10 11
8
样例输出
1 2 3 4 5 6 7 8 9 10 11
#include <iostream>
using namespace std;
int main(){
	int a[50];
	int n,m,p;
	cin>>n; 
	for(int i = 0;i<n;i++){
		cin>>a[i];
	}
	cin>>m;
	for(int i = 0;i<n;i++){
		if(a[i]>m){
			p = i;
			break;
		}
	}
	for(int i = n-1;i>=p;i--){
		a[i+1] = a[i]; 
	}
	a[p] = m;
	for(int i = 0;i<n+1;i++){
		cout<<a[i]<<" ";
	}
	return 0;
} 
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值