Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 3559 Solved: 2146
Description
有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。
假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序)已经按从小到大进行排序。
然后再从键盘上输入一个整数,将此整数插入到前有序的9个数中,使得最终的10个数依然是从小到大有序的。
Input
第一行输入以空格分隔的9个整数数,要求按从小到大的顺序输入。
第二行输入一个整数
Output
从小到大输出这10个数,每个数一行。
Sample Input
1 11 21 31 41 51 61 71 81
45
Sample Output
1
11
21
31
41
45
51
61
71
81
HINT
定义数组时,把数组长度定义为10.
代码(C语言)
\#include <stdio.h>
#include <string.h>
int main()
{
int a[10];
memset(a, 0, sizeof(a)); //初始化数组,使数组中每个元素为0
for (int i = 0; i <= 8; i++)
{
scanf("%d", &a[i]);
}
int t;
scanf("%d", &t); //输入最后一个元素
int M; //第十个元素t所在位置
for (int i = 0; i <= 8; i++)
{
if (a[i] >= t)
{
M = i; //找到比t大的元素
break;
}
}
for (int i = 9; i > M; i--)
{
a[i] = a[i - 1];
} //先给t让个位置
a[M] = t;
for (int i = 0; i <= 9; i++)
{
printf("%d\n", a[i]);
}
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 2434 Solved: 1971
Description
将一个长度为10的整型数组中的值按逆序重新存放。
如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1
Input
从键盘上输入以空格分隔的10个整数。
Output
按相反的顺序输出这10个数,每个数占一行。
Sample Input
1 2 3 4 5 6 7 8 9 0
Sample Output
0
9
8
7
6
5
4
3
2
1
代码(C语言)
代码1(有错,但是不知错在哪)
#include<stdio.h>
int main(){
int a[10];
int i = 0,temp = 0;
for(int i = 0; i < 10; i++){
scanf("%d",&a[i]);
}
for(int i = 0; i < 10; i++){
temp = a[i];
a[i] = a[10-i-1];
a[10-i-1] = temp;
printf("%d\n",a[i]);
}
printf("\n");
return 0;
}
代码2
\#include <stdio.h>
int main()
{
int a[10];
for (int i = 0; i <= 9; i++)
{
scanf("%d", &a[i]);
}
for (int i = 9; i >= 0; i--)
{
printf("%d\n", a[i]);
}
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 2781 Solved: 1917
Description
按要求输入如下格式的杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
最多输出10层
杨辉三角的原理:
每一行的下一行的最左侧a的指数都比上一行要多1而b的指数不变。
Input
输入只包含一个正整数n,表示将要输出的杨辉三角的层数。
Output
对应于该输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开
Sample Input
5
Sample Output
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
代码(C语言)
\#include <stdio.h>
#include <string.h>
int main()
{
int a[10][10];
memset(a, 0, sizeof(a));
int n; //层数
scanf("%d", &n);
a[0][0] = 1;
for (int i = 1; i < n; i++)
{
for (int j = 1; j <= i; j++)
{
a[i][ 0] = 1;
a[i][ j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 2716 Solved: 1779
Description
有一行电文,已按如下规律译成密码:
A-->Z a-->z
B-->Y b-->y
C-->X c-->x
...... ......
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。
Input
输入一行密文
Output
解密后的原文,单独占一行。
Sample Input
ZYX123zyx
Sample Output
ABC123abc
代码(C语言)
#include<stdio.h>
#include<string.h>
int main(){
char a[20];
scanf("%s",a);
int n = strlen(a);
for(int i = 0; i < n; i++){
if (a[i] >= 'A' && a[i] <= 'Z'){
a[i] = 'A' + 'Z' - a[i];
}else if (a[i] >='a' && a[i] <= 'z'){
a[i] = 'a' + 'z' - a[i];
}else{
a[i] = a[i];
}
}
for (int i = 0; i < n; i++){
printf("%c", a[i]);
}
printf("\n");
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 2424 Solved: 1698
Description
比较两个字符串s1和s2的大小,如果s1>s2,则输出一个正数;若s1=s2,则输出0;若s1<s2,则输出一个负数。
要求:不用strcpy函数;两个字符串用gets函数读入。
例如:"A"与"C"相比,由于"A"<"C",应输出负数,同时由于"A"与"C"的ASCII码差值为2,因此应输出"-2"。
同理:"And"和"Aid"比较,根据第2个字符比较的结果,"n"比"i"大5,因此应该输出"5"
Input
输入2行字符串
Output
一个整数,表示这两个字符串 比较的差值,单独占一行。
Sample Input
And
Aid
Sample Output
5
代码(C语言)
代码1
#include<stdio.h>
#include<string.h>
int main(){
char s1[200],s2[200];
int sum = 0;
gets(s1);
gets(s2);
for(int i = 0; i < strlen(s1); i++){
sum += s1[i] - s2[i];
}
printf("%d",sum);
printf("\n");
return 0;
}
代码2
#include <stdio.h>
#include <string.h>
int main()
{
char s1[100], s2[100];
scanf("%s", s1);
scanf("%s", s2);
int n1 = strlen(s1);
int n2 = strlen(s2);
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < n1; i++)
{
sum1 = sum1 + s1[i];
}
for (int i = 0; i < n2; i++)
{
sum2 = sum2 + s2[i];
}
if (sum1 == sum2)
{
printf("0");
}
else
printf("%d\n", sum1 - sum2);
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 1831 Solved: 1452
Description
从键盘上输入10个整数,存储在一个长度为10的整型数组中,要求将输入的10个数逆序输出。
如输入为:0,1,2,3,4,5,6,7,8,9 输出为9,8,7,6,5,4,3,2,1,0
Input
10个整数,以空格分隔
Output
将输入的10个整数逆序输出,每个数占一行。
Sample Input
0 1 2 3 4 5 6 7 8 9
Sample Output
9
8
7
6
5
4
3
2
1
0
代码(C语言)
#include<stdio.h>
int main(){
int a[10];
memset(a,0,sizeof(a));
for(int i = 0; i < 10; i++){
scanf("%d",&a[i]);
}
for(int i = 9; i >= 0; i--){
printf("%d",a[i]);
printf("\n");
}
printf("\n");
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 1778 Solved: 1571
Description
Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:
要求输出Fibonacci数列的前20个数。
Input
无
Output
Fibonacci数列的前20个数,每个数占一行。
Sample Input
无
Sample Output
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
代码(C语言)
#include<stdio.h>
int main(){
int fibon[20];
fibon[0] = 1;
fibon[1] = 1;
printf("%d",fibon[0]);
printf("\n");
printf("%d",fibon[1]);
printf("\n");
for(int i = 2; i < 20; i++){
fibon[i] = fibon[i-1] + fibon[i-2];
printf("%d",fibon[i]);
printf("\n");
}
printf("\n");
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 2723 Solved: 1681
Description
从键盘上输入10个整数,用冒泡法对这10个数进行排序(由小到大)。
Input
以空格分隔的10个整数
Output
依次输出排好序的10个整数,每个数占一行。
Sample Input
1 3 5 7 9 2 4 6 8 0
Sample Output
0
1
2
3
4
5
6
7
8
9
代码(C语言)
#include<stdio.h>
int main(){
int a[10];
int temp = 0;
for(int i = 0; i < 10; i++){
scanf("%d",&a[i]);
}
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9-i; j++){
if(a[j] > a[j+1]){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
for(int i = 0; i < 10; i++){
printf("%d",a[i]);
printf("\n");
}
printf("\n");
return 0;
}
疑问:中间排序for循环的体中为什么是j不是i?(已解决)
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 1939 Solved: 1578
Description
将一个2行3列的矩阵(二维数组)行列互换,存储到另一个3行2列的矩阵中。
要求以整型数据为例来解答。
Input
输入2行数据,每行3个整数,以空格分隔。
Output
行列互换后的矩阵,3行,每行2个数据,以空格分隔。
Sample Input
1 2 3
4 5 6
Sample Output
1 4
2 5
3 6
代码(C语言)
代码1
#include<stdio.h>
int main(){
int a[2][3];
int b[3][2];
for(int i = 0; i < 2; i++){
for(int j = 0; j < 3; j++){
scanf("%d",&a[i][j]);
}
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < 2; j++){
b[i][j] = a[j][i];
printf("%d ",b[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
注意:两个元素之间有空格,scanf的&取地址符号要有。
代码2
#include <stdio.h>
int main()
{
int a[2][3];
for (int i = 0; i <= 1; i++)
{
for (int j = 0; j <= 2; j++)
{
scanf("%d", &a[i][j]);
}
}
int b[3][2];
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 1; j++)
{
b[i][j] = a[j][i];
printf("%d ", b[i][j]);
}
printf("\n");
}
return 0;
}
Time Limit: 1 Sec Memory Limit: 12 MB
Submit: 2372 Solved: 1612
Description
从键盘上输入3个字符串,求出其中最大者。
Input
输入3行,每行均为一个字符串。
Output
一行,输入三个字符串中最大者。
Sample Input
England
China
America
Sample Output
England
代码(C语言)
#include<stdio.h>
#include<string.h>
int main(){
char a[50],b[50],c[50];
scanf("%s",a);
scanf("%s",b);
scanf("%s",c);
int d = 0,e =0,f = 0;
for(int i = 0; i < strlen(a); i++){
d += a[i];
}
for(int i = 0; i < strlen(b); i++){
e += b[i];
}
for(int i = 0; i < strlen(c); i++){
f += c[i];
}
if (d > e)
{
if (d > f) printf("%s",a);
else printf("%s",c);
}
else
{
if (e > f) printf("%s",b);
else printf("%s",c);
}
return 0;
}
注意:d,e,f需要初始化,仅仅定义会出现Wrong Answer(50)。
版权所有:可定博客 © WNAG.COM.CN
本文标题:《Contest100000569 – 《算法笔记》2.5小节——C/C++快速入门->数组》
本文链接:https://cloud.tencent.com/developer/article/1616876
特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~