sdut-程序设计基础Ⅰ-23级转专业第一次机测题
7-1 猴子吃桃
分数 5
作者 杨鑫
单位 大连理工大学
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输出格式:
输出第十天共吃多少桃子,第一天吃了多少桃子。
输入样例:
无
输出样例:
10天共吃3049
第一天吃1534
实现代码:
#include<bits/stdc++.h> using namespace std; int main(){ int i=1,k=1; int sum=0; int cnt=0; for(int j=2;j<=10;j++){ i=(i+1)*2; sum=sum+i; } for(int j=2;j<=9;j++){ k=(k+1)*2; cnt=cnt+k; } cout<<"10天共吃"<<sum+1<<endl; cout<<"第一天吃"<<sum-cnt; return 0; }7-2 最大公约数和最小公倍数
分数 10
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题目要求读入2个正整数A和B,然后输出它们的最大公约数和最小公倍数。
输入格式:
输入在一行中给出2个不超过10000的正整数A和B。
输出格式:
对每一组输入,在一行中输出最大公约数和最小公倍数,用逗号分隔。
输入样例:
2 3
输出样例:
1,6
实现代码:
#include<bits/stdc++.h> using namespace std; int main(){ int m,n; cin>>m>>n; int cnt,sum; for(int i=min(m,n);i>=1;i--){ if(m%i==0&&n%i==0){ cnt=i; break; } } for(int i=1;i<=m*n;i++){ if(i%m==0&&i%n==0){ sum=i; break; } } cout<<cnt<<","<<sum; }7-3 数组中的逆序对
分数 20
作者 fang
单位 广东东软学院
数组中的逆序对
给定一个长度为n的整数数组,其中可能存在正数、负数和零。请编写一个程序,计算并输出数组中的逆序对。
提示:逆序对是指两个元素的值满足前面的元素大于后面的元素。例如,对于数组[1, -2, 3, 4, -5],逆序对有(1, -2)、(1, 3)、(1, 4)、(1, -5)、(-2, 3)、(-2, 4)、(-2, -5)、(3, 4)、(3, -5)、(4, -5),共10个逆序对。
输入格式:
第一行输入一个整数n,表示数组的长度。
第二行输入n个整数,用空格隔开,表示数组的元素。
输出格式:
按顺序输出数组中的逆序对。一组逆序对的两个数中间用空格隔开并在后面加上换行符。如果题目中没有逆序对,则输出“NULL”。
输入样例:
5
1 -2 3 4 -5
输出样例:
1 -2
1 -5
-2 -5
3 -5
4 -5
代码长度限制
实现代码:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int a[110]; bool flag=0; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++){ if(a[i]>a[j]){ flag=1; cout<<a[i]<<" "<<a[j]<<endl; } } } if(flag==0) cout<<"NULL"; return 0; }7-4 杨辉三角
分数 5
作者 杨鑫
单位 大连理工大学
这是一个编程题模板。
请在这里写题目描述。例如:本题目要求读入2个整数A和B,然后输出它们的和。
输入格式:
无
输出格式:
10行的杨辉三角
输入样例:
无
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
实现代码:
#include<bits/stdc++.h> using namespace std; int main(){ int a[12][12]; for(int i=1;i<=10;i++){ for(int j=1;j<=i;j++){ if(i<=2||j==1||j==i) a[i][j]=1; else a[i][j]=a[i-1][j]+a[i-1][j-1]; } } for(int i=1;i<=10;i++){ for(int j=1;j<=i;j++){ cout<<a[i][j]<<" "; } cout<<endl; } return 0; }7-5 开关灯
分数 21
作者 于延
单位 哈尔滨师范大学
任务描述
假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。
第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。
请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。
输入格式:
输入正整数N和M,以单个空格隔开。
输出格式:
顺次输出关闭的灯的编号,其间用逗号间隔。
输入样例:
10 10
输出样例:
1,4,9
题目来源
该题目选自OpenJudge网站,在线网址:http://noi.openjudge.cn/ch0104/31/
实现代码:
#include<bits/stdc++.h> using namespace std; int main(){ int n,m; cin>>n>>m; int a[5050]; for(int i=1;i<=n;i++){ a[i]=-1; } for(int i=2;i<=m;i++){ for(int j=i;j<=n;j=j+i){ a[j]=-1*a[j]; } } int b[5050]; int j=1; cout<<"1"; for(int i=2;i<=n;i++){ if(a[i]==-1) cout<<","<<i; } }7-6 回文素数
分数 30
作者 曹风云
单位 合肥师范学院
如果一个整数是素数,同时其对应的字符串是回文字符串时,便称其为回文素数。例如,131既是素数,其对应的字符串“131”又是回文字符串,所以131是回文素数。
编写函数,输入一个正整数 n作为函数参数 , 请你在一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个逗号。
输入格式:
输入一个正整数
输出格式:
一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个逗号。
输入样例:
在这里给出一组输入。例如:
131
输出样例:
在这里给出相应的输出。例如:
2,3,5,7,11,101,
实现代码:
#include<bits/stdc++.h> using namespace std; int a[100]; int fun(int x){ int i; for(i=2;i*i<=x;i++){ if(x%i==0){ return 0; break; } } return 1; } int f(int i){ int sum=-1; int j=0; if(i<10) return 1; else{ while(i){ a[j++]=i%10; i=i/10; sum=sum+1; } for(int k=0;k<=sum;k++){ if(a[k]!=a[sum-k]) { return 0; break; } } } return 1; } int main(){ int n; cin>>n; for(int i=2;i<n;i++){ fun(i); f(i); if(fun(i)==1&&f(i)==1) cout<<i<<","; } return 0; }7-7 奇偶分家
分数 10
作者 陈越
单位 浙江大学
给定N个正整数,请统计奇数和偶数各有多少个?
输入格式:
输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。
输出格式:
在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。
输入样例:
9
88 74 101 26 15 0 34 22 77
输出样例:
3 6
实现代码:
#include<bits/stdc++.h> using namespace std; int a[1010]; int main(){ int n; cin>>n; int sum=0; int cnt=0; for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]%2==0) sum++; else cnt++; } cout<<cnt<<" "<<sum; return 0; }7-8 sdut-C语言实验-去掉重复的数据
分数 20
作者 马新娟
单位 山东理工大学
给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。(题目来源:teacher 刘)
输入格式:
输入包含两行:第一行包含一个正整数n(1≤n≤20000),表示第二行序列中数字的个数;第二行包含n个整数,整数之间以一个空格分开。每个整数大于等于10、小于等于5000。
输出格式:
输出去重之后的数据,数据之间用空格间隔。
输入样例1:
5
10 12 93 12 75
输出样例1:
10 12 93 75
输入样例2:
10
21 30 14 55 32 63 11 30 55 30
输出样例2:
21 30 14 55 32 63 11
实现代码:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int a[20010]; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(a[j]==a[i]) a[j]=0; } } cout<<a[1]; for(int i=2;i<=n;i++){ if(a[i]!=0) cout<<" "<<a[i]; } return 0; }