前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Contest100000569 – 《算法笔记》2.5小节——C/C++快速入门->数组

Contest100000569 – 《算法笔记》2.5小节——C/C++快速入门->数组

作者头像
可定
发布2020-04-20 14:54:15
5620
发布2020-04-20 14:54:15
举报
文章被收录于专栏:细嗅蔷薇细嗅蔷薇

Problem A: 习题6-4 有序插入

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语言)

代码语言:javascript
复制
\#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;
}

Problem B: 习题6-5 数组元素逆置

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

代码语言:javascript
复制
0
9
8
7
6
5
4
3
2
1

代码(C语言)

代码1(有错,但是不知错在哪)

代码语言:javascript
复制
#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

代码语言:javascript
复制
\#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;
}

Problem C: 习题6-6 杨辉三角

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语言)

代码语言:javascript
复制
\#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;
}

Problem D: 习题6-12 解密

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语言)

代码语言:javascript
复制
#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;
}

Problem E: 习题6-13 字符串比较

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

代码语言:javascript
复制
And
Aid

Sample Output

5

代码(C语言)

代码1

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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;
}

Problem F: 例题6-1 逆序输出数组元素

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语言)

代码语言:javascript
复制
#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;
}

Problem G: 例题6-2 数组求解Fibonacci数列问题

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

代码语言:javascript
复制
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765

代码(C语言)

代码语言:javascript
复制
#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;
}

Problem H: 例题6-3 冒泡排序

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

代码语言:javascript
复制
0
1
2
3
4
5
6
7
8
9

代码(C语言)

代码语言:javascript
复制
#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?(已解决)

Problem I: 例题6-4 矩阵转置

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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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;
}

Problem J: 例题6-9 字符串求最大值

Time Limit: 1 Sec Memory Limit: 12 MB

Submit: 2372 Solved: 1612

Description

从键盘上输入3个字符串,求出其中最大者。

Input

输入3行,每行均为一个字符串。

Output

一行,输入三个字符串中最大者。

Sample Input

代码语言:javascript
复制
England
China
America

Sample Output

England

代码(C语言)

代码语言:javascript
复制
#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,尊重他人劳动成果,谢过~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Problem A: 习题6-4 有序插入
  • Problem B: 习题6-5 数组元素逆置
  • Problem C: 习题6-6 杨辉三角
  • Problem D: 习题6-12 解密
  • Problem E: 习题6-13 字符串比较
  • Problem F: 例题6-1 逆序输出数组元素
  • Problem G: 例题6-2 数组求解Fibonacci数列问题
  • Problem H: 例题6-3 冒泡排序
  • Problem I: 例题6-4 矩阵转置
  • Problem J: 例题6-9 字符串求最大值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档