C/C++[数组]

习题6-4有序插入

  • 题目描述
    有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。
    假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序)已经按从小到大进行排序。
    然后再从键盘上输入一个整数,将此整数插入到前有序的9个数中,使得最终的10个数依然是从小到大有序的。

  • 输入
    第一行输入以空格分隔的9个整数数,要求按从小到大的顺序输入。
    第二行输入一个整数

  • 输出
    从小到大输出这10个数,每个数一行。
    样例输入
    1 11 21 31 41 51 61 71 81
    45
    样例输出
    1
    11
    21
    31
    41
    45
    51
    61
    71
    81
    提示
    定义数组时,把数组长度定义为10.

#include 
int main()
{
    int a[10],i,j,num;
    for (i = 0; i< 9; i++)
        scanf("%d",&a[i]);
    scanf("%d",&num);
    if (num > a[8])
        a[9] = num;
    else
    {
        for(i = 0; i < 9; i++){
            if (num < a[i])
            {
                for (j = 0;j< 9-i;j++)
                {
                    a[9-j] = a[9-1-j];
                }
                a[i] = num;
                break;
            }
        }
    }
    for (i = 0;i < 10; i++)
        printf("%d\n",a[i]);

    return 0;
}

习题6-5逆序

  • 题目描述
    将一个长度为10的整型数组中的值按逆序重新存放。
    如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1

  • 输入
    从键盘上输入以空格分隔的10个整数。

  • 输出
    按相反的顺序输出这10个数,每个数占一行。

  • 样例输入
    1 2 3 4 5 6 7 8 9 0
  • 样例输出
    0
    9
    8
    7
    6
    5
    4
    3
    2
    1
#include 
int main()
{
    int a[10];
    int i;
    for (i = 0;i < 10; i++)
    {
        scanf("%d",&a[9-i]);
    }
    for (i = 0; i< 10; i++)
        printf("%d\n",a[i]);
    return 0;

}

习题6-6杨辉三角

  • 题目描述
    按要求输入如下格式的杨辉三角
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1

最多输出10层

  • 输入
    输入只包含一个正整数n,表示将要输出的杨辉三角的层数。
  • 输出
    对应于该输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开
  • 样例输入
    5
  • 样例输出
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
 #include 

int main()
{
    int n;
    scanf("%d",&n);
    int a[n][n];
    a[0][0] = 1;
    int i,j;
    for(i = 1; i < n; i++) //每行
    {
        a[i][0] = 1;
        a[i][i] = 1;
        for (j = 0; j < i+1 -2;j++) //每行1中间的数
        {
            a[i][j+1] = a[i-1][j] + a[i-1][j+1];
        }
    }
    for (i = 0;ifor (j=0;j1;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    return 0;
}

习题6-7解密

  • 题目描述
    有一行电文,已按如下规律译成密码:
    A–>Z a–>z
    B–>Y b–>y
    C–>X c–>x
    …… ……

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。

  • 输入
    输入一行密文
  • 输出
    解密后的原文,单独占一行。
  • 样例输入
    ZYX123zyx
  • 样例输出
    ABC123abc
#include 
#include 
int main()
{
    char s[100];
    scanf("%s",s);
    int i;
    for (i = 0; i < strlen(s);i++)
    {
        if ((int)s[i] < 65)
            printf("%c",s[i]);
        else if((int)s[i] <= 'Z')

            printf("%c",2*'Z'-(s[i]+25));
        else
            printf("%c",2*'z'-(s[i]+25));

    }
    printf("\n");
    return 0;
}

习题6-8字符串比较

  • 题目描述
    比较两个字符串s1和s2的大小
  • 要求:不用strcpy函数;两个字符串用gets函数读入。
    例如:”A”与”C”相比,由于”A”<”C”,应输出负数,同时由于”A”与”C”的ASCII码差值为2,因此应输出”-2”。

同理:”And”和”Aid”比较,根据第2个字符比较的结果,”n”比”i”大5,因此应该输出”5”

  • 输入
    输入2行字符串

  • 输出
    一个整数,表示这两个字符串 比较的差值,单独占一行。

  • 样例输入
    And
    Aid
  • 样例输出
    5
 #include 
int main()
{
    char str1[10],str2[10];
    gets(str1);
    gets(str2);
    int i=0;
    while(str1[i] == str2[i])
    {
        i++;
    }
    printf("%d",str1[i]-str2[i]);
    return 0;
}

习题6-9逆序输出

  • 题目描述
    从键盘上输入10个整数,存储在一个长度为10的整型数组中,要求将输入的10个数逆序输出。
    如输入为:0,1,2,3,4,5,6,7,8,9 输出为9,8,7,6,5,4,3,2,1,0

    • 输入
      10个整数,以空格分隔
    • 输出
      将输入的10个整数逆序输出,每个数占一行。
    • 样例输入
      0 1 2 3 4 5 6 7 8 9
    • 样例输出
      9
      8
      7
      6
      5
      4
      3
      2
      1
      0
#include 
int main()
{
    int a[10],i;
    for (i = 0;i < 10;i++)
        scanf("%d",&a[i]);
    for (i = 0;i < 10;i++)
        printf("%d\n",a[9-i]);
    return 0;
}

习题6-10Fibonacci数列

  • 题目描述
    Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:
    要求输出Fibonacci数列的前20个数。

  • 输入

  • 输出
    Fibonacci数列的前20个数,每个数占一行。
  • 样例输入
  • 样例输出
    1
    1
    2
    3
    5
    8
    13
    21
    34
    55
    89
    144
    233
    377
    610
    987
    1597
    2584
    4181
    6765
#include 
int main()
{
    int a[20]={1,1};
    int i;
    for (i = 2; i < 20; i++)
        a[i] = a[i-1] + a[i-2];
    for (i = 0; i < 20; i++)
        printf("%d\n",a[i]);
    return 0;
}

习题6-11冒泡排序

  • 题目描述
    从键盘上输入10个整数,用冒泡法对这10个数进行排序(由小到大)。
  • 输入
    以空格分隔的10个整数
  • 输出
    依次输出排好序的10个整数,每个数占一行。
  • 样例输入
    1 3 5 7 9 2 4 6 8 0
  • 样例输出
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
#include 
int main()
{
    int a[10],i,j,temp;
    for (i = 0; i < 10; i++)
        scanf("%d",&a[i]);
    for (i = 0; i < 10-1; i++) 
    {
        for (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 (i = 0; i < 10; i++)
        printf("%d\n",a[i]);
    return 0;
} 

习题6-12矩阵转置

  • 题目描述
    将一个2行3列的矩阵(二维数组)行列互换,存储到另一个3行2列的矩阵中。
    要求以整型数据为例来解答。

  • 输入
    输入2行数据,每行3个整数,以空格分隔。

  • 输出
    行列互换后的矩阵,3行,每行2个数据,以空格分隔。
  • 样例输入
    1 2 3
    4 5 6
  • 样例输出
    1 4
    2 5
    3 6
#include 
int main()
{
    int a[2][3],b[3][2];
    int i,j;
    for (i = 0; i < 2; i++)
        for (j = 0; j < 3; j++)
            scanf("%d",&a[i][j]);

    for (i = 0; i < 3; i++)
        for (j = 0; j < 2; j++)
            b[i][j] = a[j][i];

    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
        {
            printf("%d ",b[i][j]);
        }
        printf("\n");
    }
    return 0;
}

习题6-13字符串求最大值

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

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

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

    • 样例输入
      England
      China
      America
      样例输出
      England
#include 
#include 
int main()
{
    char str1[50],str2[50],str3[50];
    gets(str1);
    gets(str2);
    gets(str3);
    if (strcmp(str1, str2)>0)
    {
        if (strcmp(str1, str3)>0)
            printf("%s\n",str1);
        else
            printf("%s\n",str3);
    }
    else
    {
        if (strcmp(str2, str3)>0)
            printf("%s\n",str2);
        else
            printf("%s\n",str3);
    }
    return 0;
}

你可能感兴趣的:(Algorithm,note,C/C++)