编程题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;
}