题目1
【问题描述】
判断用户输入的整数和字符串(不超过100字符)是否为回文。
【输入输出形式】
Enter an integer:12321
12321 is a symmetry!
Enter a string:howoh
howoh is a symmetry!
【样例输入输出】
Enter an integer:45678
45678 is not a symmetry!
Enter a string:what
what is not a symmetry!
【样例说明】
其中:Enter an integer:为输出提示,12321为用户输入的整数;
字符串类似:Enter a string:为输出提示,what为用户输入的字符串
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main (void ) { char str[180 ]; int l; int i=0 ; cout<<"Enter an integer:" ; cin.get (str,180 ); l=strlen (str); for (i=0 ;i<=l;i++) { if (str[i]!=str[l-i-1 ]) { break ; } } if (i>l/2 ) cout<<str<<" is a symmetry!" <<endl; else cout<<str<<" is not a symmetry!" <<endl; cout<<"Enter a string:" ; cin.get (); char strl[180 ]; cin.get (strl,sizeof (strl)); l=strlen (strl); for (i=0 ;i<=l;i++) { if (strl[i]!=strl[l-i-1 ]) { break ; } } if (i>l/2 ) cout<<strl<<" is a symmetry!" <<endl; else cout<<strl<<" is not a symmetry!" <<endl; }
题目2
【问题描述】
按下标顺序且同数保留一个的数组合并
由用户输入两个整型数组的元素个数及各元素,程序将两个数组中的各元素合并到第三个数组中。合并规则:1.相同数只保留一个;2.按下标顺序合并,同下标小者在前。程序输出合并后的数组中的各元素,元素间空两格(第一个元素第1列上输出)。请设计合适函数实现(程序至少两个函数,包括main)。
【输入形式】
5 (用户输入第一个数组的长度)
12 2 34 12 17 (用户输入第一个数组中的各元素)
6 (用户输入第二个数组的长度)
2 12 33 17 15 34 (用户输入第二个数组中的各元素)
【输出形式】
2 12 33 34 17 15 (输出合并之后的各元素,注意次序)
【样例输入】
7
1 -1 -8 14 14 58 14
5
31 -8 17 58 31
【样例输出】
1 31 -8 -1 17 14 58
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main () { int m; cin>>m; int a[m]; for (int i=0 ; i<m; i++) { cin >> a[i]; } int n; cin>>n; int b[n]; for (int i=0 ; i<n; i++) { cin >> b[i]; } int c[m+n]; int q,w,d; q=w=d=0 ; for (int i=0 ;i<(m+n);i++) { if (q<m && w<n) { if (a[q]<b[w]){ if (q<m) { c[i]=a[q]; q++,i++; } if (w<n) { c[i]=b[w]; w++; } } else { if (w<n) { c[i]=b[w]; w++,i++;} if (q<m) { c[i]=a[q]; q++; } } } else if (q==m && w<n){ c[i]=b[w]; w++; } else if (q<m && w==n){ c[i]=a[q]; q++; } } for (int v=0 ;v<m+n;v++){ d=0 ; for (int i=0 ;i<v;i++){ if (c[v]==c[i]){ d=1 ; } else { } } if (d==0 ) { cout<<c[v]<<" " ; } } }
题目3
【问题描述】
求二维整型数组的“最大点”。二维数组的“最大点”定义为:某个数是所在行的最大值,并且是所在列的最大值。注意:某行或某列上可能有多个“最大点”。
【输入形式】
从控制台读入二维数组。
第一行只有以空格分隔的两个正整数n和m(n,m<=10),n代表二维数组的行数,m代表二维数组的列数。
然后在后续n行上输入二维数组的元素,每行有m个以若干空格分隔的整数,代表二维数组在该行上的所有元素。
【输出形式】
向控制台输出二维数组的“最大点”,按行下标、列下标从小到大的顺序输出,每行一个,先输出“最大点”数值,再输出对应的行数、列数(行列都从1开始计数),以一个空格分隔。
【样例输入】
3 4
8 60 7 100
10 498 12 49
-71 132 4 85
【样例输出】
100 1 4
498 2 2
【样例说明】
输入了一个三行四列的二维数组,第一行第四列的元素100是第一行的最大元素,同时也是第四列的最大元素,所以该元素是“最大点”,输出100 1 4。同样第二行第二列的元素498也是第二行的最大元素,同时是第二列的最大元素,故该元素也是“最大点”,输出498 2 2。
【评分标准】
该题要求输出二维数组的所有“最大点”,共有5个测试点。上传C语言文件名为example1b.c。
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #include <stdio.h> int main () { int a[10 ][10 ], n, m, i, j, k; scanf ("%d%d" , &n, &m); for (i = 0 ; i < n; i++) { for (j = 0 ; j < m; j++) { scanf ("%d" , &a[i][j]); } } int row, col, s,flag=1 ,col1,s1,t=0 ; for (i = 0 ; i < n; i++) { s = a[i][0 ]; row = i, col = 0 ; for (j = 1 ; j < m; j++) { if (a[i][j] > s) { s = a[i][j]; col = j; } } for (j=0 ;j<m;j++) { if (a[i][j] == s&&j!=col) { s1 = a[i][j]; col1 = j; t=1 ; } } for (k = 0 ; k < n; k++) { if (a[k][col] > s) flag=0 ; if (flag==0 ) break ; } row++,col++; if (flag) printf ("%d %d %d\n" , s, row, col); flag=1 ; if (t) { for (k = 0 ; k < n; k++) { if (a[k][col1] > s1) flag=0 ; if (flag==0 ) break ; } col1++; if (flag==1 ) printf ("%d %d %d\n" , s1, row, col1); t=0 ; } } return 0 ; }
题目4
【问题描述】
程序先让用户输入一个整数,表示一维动态数组的长度;再让用户输入动态数组中的各个元素;然后对数组元素按由小到大排序;程序最后输出排序之后的各元素。
【输入形式】
7 (表示动态数组的长度为7)
132 4 78 97 54 21 1 (用户输入7个无序元素)
【输出形式】
1 4 21 54 78 97 132 (输出排序后的7个有序元素。注意:元素间约定用两个空格隔开)
【样例输入】
5
456 23 64 7 33
【样例输出】
7 23 33 64 456
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <iostream> using namespace std;int main () { int n; cin>>n; int a[1000 ]={0 }; for (int i=0 ;i<n;i++) cin>>a[i]; for (int i=1 ;i<n;i++) { for (int j=0 ;j<n-i;j++) if (a[j]>a[j+1 ]) { int t=a[j]; a[j]=a[j+1 ]; a[j+1 ]=t; } } for (int i=0 ;i<n;i++) cout<<a[i]<<" " ; return 0 ; }
题目5
【问题描述】
程序将两个整型有序动态数组中的元素有序合并到第三个动态数组中,并输出合并之后的各元素。设各有序数组按从小到大排列。
【输入形式】
3 (表示第一个数组的长度为3)
25 68 9876 (输入第一个数组的3个有序元素)
4 (表示第二个数组的长度为4)
12 35 77 156 (输入第二个数组的4个有序元素)
【输出形式】
12 25 35 68 77 156 9876 (合并后数组中的7个有序元素,注意:元素间两个空格隔开)
【样例输入】
5
12 32 45 78 145
3
12 25 111
【样例输出】
12 12 25 32 45 78 111 145
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <iostream> using namespace std;int main () { int b[1000 ]={0 },c[1000 ]={0 },a[1000 ]={0 }; int nb,nc; cin>>nb; for (int i=0 ;i<nb;i++) { cin>>b[i];a[i]=b[i];} cin>>nc; for (int i=0 ;i<nc;i++) { cin>>c[i];a[i+nb]=c[i];} for (int i=1 ;i<nb+nc;i++) { for (int j=0 ;j<nb+nc-i;j++) if (a[j]>a[j+1 ]) { int t=a[j]; a[j]=a[j+1 ]; a[j+1 ]=t; } } for (int i=0 ;i<nb+nc;i++) cout<<a[i]<<" " ; return 0 ; }
题目6
【问题描述】
数组元素的移动,把数组的第x个位置的元素先保存起来,然后把x+1到n的元素,依次往前移一位,最后原来的第x个位置的元素放在最后。
【输入形式】
有3行
第一行有一个整数n
第二行有n个整数
第三行有一个整数x
【输出形式】
移动后的数组
【样例输入】
8
1 2 3 4 5 6 7 8
1
【样例输出】
2 3 4 5 6 7 8 1
【代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <iostream> using namespace std;int main () { int a[1000 ]={0 },n,x; cin>>n; for (int i=0 ;i<n;i++) cin>>a[i]; cin>>x; int t=a[x-1 ]; for (int i=x-1 ;i<n;i++) a[i]=a[i+1 ]; a[n-1 ]=t; for (int i=0 ;i<n;i++) cout<<a[i]<<" " ; return 0 ; }
代码可能略有不足,请大佬多多指教