题目一:A+B问题
Description:
输入A、B,输出A+B。
Input:
输入的第一行包括两个整数,由空格分隔,分别表示A、B。
Output:
输出一行,包括一个整数,表示A+B的值。
Sample input:
12 45
Sample output:
57
数据规模与约定
-10000 <= A, B <= 10000。
#include
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b;
return 0;
}
题目二:数列排序
Description:
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
Input:
第一行为一个整数n。 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
Output:
输出一行,按从小到大的顺序输出排序后的数列。
Sample input:
5 8 3 6 4 9
Sample output:
3 4 6 8 9
#include
#include
using namespace std;
int main()
{
int a[200],n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
cout< return 0; } 题目三:十六进制转八进制 Description: 给定n个十六进制正整数,输出它们对应的八进制数。 Input: 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 Output: 输出n行,每行为输入对应的八进制正整数。 Sample input: 2 39 123ABC Sample output: 71 4435274 【注意】 输入的十六进制数不会有前导0,比如012A。 输出的八进制数也不能有前导0。 #include #include int main() { int n,i,j,k,a,cur,ok,m,l,flag; char s[10][100001],d16[16][5]= {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"},out[4]= {},z[13]= {}; scanf("%d",&n); for(j=0; j scanf("%s",s[j]); for(j=0; j { k=0; ok=1; flag = 0; m=0; /*初始化标记数据*/ l=strlen(s[j]); /* 初始化标记数据*/ a=3-l%3; /*初始化标记数据*/ if(a==3) ok=0; /*十六进制数长度刚好为3的倍数时转二进制不需补0,ok标记其是否为3的倍数0是1不是*/ for(i=0; i { if(65<=s[j][i]) s[j][i]-=7; if(ok) /*十六进制数位数不足转二进制时补0占位*/ if(a==1) { strcpy(z,"0000"); k=k+4; ok=0; a=0; } else if(a==2) { strcpy(z,"00000000"); k=k+8; ok=0; } z[k++]=d16[s[j][i]-48][0]; /*一位十六进制转四位二进制*/ z[k++]=d16[s[j][i]-48][1]; z[k++]=d16[s[j][i]-48][2]; z[k++]=d16[s[j][i]-48][3]; if(k==12) /*每转三位十六进制数将其转为四位八进制数*/ { m=0; for(cur=0; cur<12; m++) out[m]=((z[cur++]-48)*4+(z[cur++]-48)*2+(z[cur++]-48)*1)+48; cur = 0; k=0; if(!flag) while(out[cur]=='0'&&cur cur++; if(cur==m) flag = 0; else flag = 1; for(; cur printf("%c",out[cur]); } } putchar('\n'); } return 0; } 题目四:十六进制转十进制 Description: 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 Sample input: FFFF Sample output: 65535 #include #include using namespace std; int main() { string s; while (cin >> s) { int len = s.length(); long long sum = 0; for (int i = 0; i < len; i++) { if (s[i] >= 'A' && s[i] <= 'F') { sum = sum * 16 + s[i] - 'A' + 10; } else { sum = sum * 16 + s[i] - '0'; } } cout << sum; } return 0; } 题目五:十进制转十六进制 Description: 十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。 给出一个非负整数,将它表示成十六进制的形式。 Input: 输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647 Output: 输出这个整数的16进制表示 Sample input: 30 Sample output: 1E #include "stdio.h" int main() { int num=0; int a[100]; int i=0; int m=0; int yu; char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; scanf("%d",&num); if(num==0) printf("0"); while(num>0) { yu=num%16; a[i++]=yu; num=num/16; } for(i=i-1;i>=0;i--) //倒序输出 {m=a[i]; printf("%c",hex[m]); } printf("\n"); } 题目六:特殊回文数 Description: 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 Input: 输入一行,包含一个正整数n。 Output: 按从小到大的顺序输出满足条件的整数,每个整数占一行。 Sample input: 52 Sample output: 899998 989989 998899 #include using namespace std; int main() { int x=0,y=0,x1=0,y1=0,x2=0,y2=0; int n; cin>>n; for(int i=10000;i<=99999;i++) {//12321 x=i/1000; y=i%10; x1=i%100; y1=x1/10; x2=i/100; y2=x2%10; if(x==y*10+y1&&(y1+y)*2+y2==n) cout< } for(int i=100000;i<=999999;i++) { x=i/1000; x1=i%1000; y=x1%10; y1=x1%100; x2=y1/10; y2=x1/100; if(x==y*100+x2*10+y2&&(y+x2+y2)*2==n) cout< } return 0; } 题目七:回文数 Description: 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。 Output: 按从小到大的顺序输出满足条件的四位十进制数。 #include using namespace std; int main() { int x,y,x1,y1; for(int i=1000;i<=9999;i++) { x=i/100; y=i%10; x1=i%100; y1=x1/10; if(x==y*10+y1) cout< } return 0; } 题目八:特殊的数字 Description: 153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。 Output: 按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。 #include using namespace std; int main() { int x,y,x1,y1; for(int i=100;i<=999;i++) { x=i/100; y=i%10; x1=i%100; y1=x1/10; if(i==x*x*x+y1*y1*y1+y*y*y) cout< } return 0; } 题目九:杨辉三角形 Description: 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。 下面给出了杨辉三角形的前4行: 1 1 1 1 2 1 1 3 3 1 给出n,输出它的前n行。 Input: 输入包含一个数n。 Output: 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。 Sample input: 4 Sample output: 1 1 1 1 2 1 1 3 3 1 #include #include using namespace std; int main() { int n,a[35][35]; cin>>n; for(int i=0;i { a[i][0]=1; a[i][i]=1; for(int j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(int i=0;i { for(int j=0;j<=i;j++) cout< cout< } return 0; } 题目十:查找整数 Description: 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。 Input: 第一行包含一个整数n。 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 Output: 如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1 Sample input: 6 1 9 4 8 3 9 9 Sample output: 2 数据规模与约定 1 <= n <= 1000。 #include #include using namespace std; int main() { int n,a[10000],s,flag=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>s; for(int i=1;i<=n;i++) if(a[i]==s) { flag=1;cout< if(flag==0) cout<<-1; return 0; } 题目十一:数列特征 Description: 给出n个数,找出这n个数的最大值,最小值,和。 Input: 第一行为整数n,表示数的个数。 第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。 Output: 输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。 Sample input: 5 1 3 -2 4 5 Sample output: 5 2 -11 数据规模和约定 1 <= n <= 10000。 #include #include #include using namespace std; int main() { int n; cin >> n; vector for (int i = 0; i < n; i++) { cin >> nums[i]; } int maxNum = nums[0]; int minNum = nums[0]; int sum = 0; for (int i = 0; i < n; i++) { if (nums[i] > maxNum) { maxNum = nums[i]; } if (nums[i] < minNum) { minNum = nums[i]; } sum += nums[i]; } cout << maxNum << endl; cout << minNum << endl; cout << sum << endl; return 0; } 题目十二:字母图形 Description: 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。 Input: 输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数 Output: 输出n行,每个m个字符,为你的图形。 Sample input: 5 7 Sample output: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 数据规模与约定 1 <= n, m <= 26。 #include #include using namespace std; int main(){ int n, m; cin >> n >> m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cout << char(abs(i-j) + 'A'); } cout << endl; } return 0; } 题目十三:01字符串 Description: 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串。 Input: 本试题没有输入。 Output: 输出32行,按从小到大的顺序每行一个长度为5的01串。 Sample output: 00000 00001 00010 00011 <以下部分省略> #include using namespace std; int main() { int x[5]; x[0]=0,x[1]=1; for(int a=0;a<2;a++) { for(int b=0;b<2;b++) { for(int c=0;c<2;c++) { for(int d=0;d<2;d++) { for(int e=0;e<2;e++) { cout< } } } } } return 0; } 题目十四:闰年判断 Description: 给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年: 1. 年份是4的倍数而不是100的倍数; 2. 年份是400的倍数。 其他的年份都不是闰年。 Input: 输入包含一个整数y,表示当前的年份。 Output: 输出一行,如果给定的年份是闰年,则输出yes,否则输出no。 Sample input: 2013 Sample output: no 数据规模与约定 1990 <= y <= 2050。 #include using namespace std; int main() { int y,x,x1,x2; cin>>y; x=y%4; x1=y%100; x2=y%400; if(x==0&&x1!=0||x2==0) cout<<"yes"; else cout<<"no"; return 0; } 题目十五:Fibonacci数列 Description: Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 Input: 输入包含一个整数n。 Output: 输出一行,包含一个整数,表示Fn除以10007的余数。 Sample input: 10 Sample output: 55 #include using namespace std; int main() { int n; cin >> n; int f1 = 1, f2 = 1, fn = 1; for (int i = 3; i <= n; i++) { fn = (f1 + f2) % 10007; f1 = f2; f2 = fn; } cout << fn ; return 0; } 题目十六:圆的面积 Description: 给定圆的半径r,求圆的面积。 Input: 输入包含一个整数r,表示圆的半径。 Output: 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。 Sample input: 4 Sample output: 50.2654825 数据规模与约定 1 <= r <= 10000。 #include #include #define PI 3.14159265358979323 using namespace std; int main() { int r; double s; cin>>r; s=PI*r*r; cout< return 0; } 题目十七:序列求和 Description: 求1+2+3+...+n的值。 Input: 输入包括一个整数n。 Output: 输出一行,包括一个整数,表示1+2+3+...+n的值。 Sample input: 4 Sample output: 10 数据规模与约定 1 <= n <= 1,000,000,000。 #include using namespace std; int main() { long long n; while(cin >> n) {long long sum = (n * (n + 1)) / 2; cout << sum << endl;} return 0; } 精彩文章
发表评论