巩固数组的一些练习题(含参考代码)

字符串

题目描述 :
输入一个字符串,将其中所有的大写和小写字母改成该字母的下一个字母,z 的下一个字母为 a。

输入 ​ 输入一个不包含空格的字符串。字符串长度小于 50。

输出 ​ 输出一行,为转换后的字符串。

样例输入
ABCDZ123abcdefz
样例输出
BCDEA123bcdefga

#include<stdio.h>

char str[55];

int main(){
    scanf("%s", str);
    for(int i = 0; str[i]; i++){
        if(str[i] <= 'z' && str[i] >= 'a' || str[i] <= 'Z' && str[i] >= 'A'){
            if(str[i] == 'z' || str[i] == 'Z') str[i] -= 25;
            else ++str[i];
        }
    }
    printf("%s\n", str);

    return 0;
}

字符反转

题目描述 ​ :
输入一个字符串,然后把这个字符串反转输出。

输入 ​ 输入一个字符串,不包含空格。(长度小于 50)

输出 ​ 输出这个字符串的反转。

样例输入
1234567890
样例输出
0987654321

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

char str[55];

int main(){
    scanf("%s", str);
    int len = strlen(str);
    for(int i = len - 1; i >= 0; i--){
        printf("%c", str[i]);
    }
    printf("\n");

    return 0;
}

字符串中A的数量

题目描述 ​:
输入一个字符串,统计其中字符 A 的数量并输出。

输入 ​ 输入一个不带空格的字符串,字符串长度不超过 100。

输出 ​ 输出字符串中字符 A 的数量。

样例输入
AabdkeaoektA
样例输出
2

#include<stdio.h>

char str[105];

int main(){

    scanf("%s", str);

    int cnt = 0;
    for(int i = 0; str[i]; i++){
        if(str[i] == 'A') ++cnt;
    }
    printf("%d\n", cnt);

}

抽奖

题目描述 ​:
公司举办年会,为了活跃气氛,设置了摇奖环节。参加聚会的每位员工都有一张带有号码的抽奖券。

​ 现在,主持人一次公布n个不同的获奖号码,小谢看着自己抽奖券上的号码num,无比紧张。

​ 请编写一个程序,如果小谢获奖了,请输出他中奖的是第几个号码;如果没有中奖,请输出0。

输入 ​ 第一行一个正整数n表示有n个获奖号码,2<n≤100。

​ 接下来n行包含n个正整数,每行一个数,表示依次公布的n个获奖号码。

​ 最后一行一个正整数num,表示小谢抽奖券上的号码。

输出 ​ 一行一个整数,如果小谢中奖了,表示中奖的是第几个号码;如果没有中奖,则为0。

样例输入
7 17 2 3 4 9555 6 1 3
样例输出
3

#include<stdio.h>

int num[105];

int main(){
    int n, i = 0;
    scanf("%d", &n);
    for(i = 0; i < n; i++) scanf("%d", &num[i]);
    int x, flag = 0;
    scanf("%d", &x);
    for(i = 0; i < n; i++){
        if(num[i] == x){
            flag = 1;
            break;
        } 
    }
    if(flag){
        printf("%d\n", i + 1);
    } else {
        printf("0");
    }


    return 0;
}

校门外的树

题目描述:
学校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置,数轴上的每个整数点(即0,1,2,……,L)都有一棵树。


由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任意区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。请计算将这些树都移走后,马路上还有多少棵树。

输入 ​ 第一行有两个正整数L(1≤L≤10000)和M(1≤M≤100), L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。

​ 接下来的M行,每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

输出 ​ 一行一个整数,表示马路上剩余的树的数目。

样例输入
500 3 150 300 100 200 470 471
样例输出
298

#include<stdio.h>

int arr[100005];

int main(){
    int l, m, cnt = 0;
    scanf("%d%d", &l, &m);

    for(int i = 0; i <= l; i++){
        arr[i] = 1;
    }

    while(m--){
        int x, y;
        scanf("%d%d", &x, &y);
        for(int i = x; i <= y; i++){
            arr[i] = 0;
        }
    }

    for(int i = 0; i <= l; i++){
        if(arr[i]) ++cnt;
    }

    printf("%d\n", cnt);

    return 0;
}

方阵对角线

题目描述 ​:
理工学院的老师让同学们排成了一个 n∗n 的方阵。好奇的你想知道这个方阵的对角线 上的同学的身高都是怎么样的。​
现已知所有同学的身高,数值为整数,单位:厘米。要求输出所有对角线上(自左向右、自上 向下编号时行列编号相同)的同学的身高。

输入 输入共有n+1行:

第一行有一个整数 n 表示方阵中的学生行、列数(0<n≤30 ) 之后 行每行有
n个由空格分隔的整数,分别表示方阵中对应位置同学的身高(大于等 于 140 ,小于 190 ),单位:厘米。
输出 输出共有 n​行,每行一个整数,为对角线上同学的身高。
样例输入
3
140 160 140
183 172 170
180 181 174
样例输出
140
172
174


#include<stdio.h>

int arr[35][35];

int main(){
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            scanf("%d", &arr[i][j]);
        }
    }
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if(i == j){
                printf("%d\n", arr[i][j]);break;
            }
        }
    }

    return 0;
}

矩阵旋转

题目描述 ​ :
给出一个 n∗m 的整数矩阵,将这个矩阵顺时针旋转 90o 后输出。

输入 ​ 第一行输入两个整数 n,m。(1≤n,m≤200)

​ 接下来 n 行,每行输入 m 个元素,表示输入的矩阵。矩阵中的元素都是绝对值小于 10000 的整数。

输出 ​ 输出 m 行,每行 n 个元素,表示旋转后的矩阵。

样例输入
3 4
-1 3 6 3 7 7 9 1 10 3 4 6
样例输出
10 7 -1 3 7 3 4 9 6 6 1 3

#include<stdio.h>

int arr[205][205];

int main(){
    int n, m;
    scanf("%d%d", &n, &m);

    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            scanf("%d", &arr[i][j]);

    for(int i = 0; i < m; i++){
        for(int j = n - 1; j >= 0; j--){
            j == n - 1 || printf(" ");
            printf("%d", arr[j][i]);
        }
        printf("\n");
    }

    return 0;
}

队列行平均数

题目描述:
​理工学院的老师让同学们排成了一个 n∗m 的长方形队列,老师想知道现在每行同学的 身高平均数是多少,你可以帮他求一下吗。​
现已知所有同学的身高,数值为整数,单位:厘米。要求输出每一行同学们身高的平均数。

输入 输入共有 n+1 行:

第一行有两个整数 n,m,分别表示长方形队列中的学生行、列数(0<N≤30) 之后 n行每行有 m
个由空格分隔的整数,分别表示长方形队列中对应位置同学的身高 (大于等于140 ,小于190​ ),单位:厘米。 输出
输出共有n行,每行一个实数,为每一行所有同学身高的平均值,保留小数点后六位。

样例输入
3 3 140 160 140 183 172 170 180 181 174
样例输出
146.666667
175.000000
178.333333

#include<stdio.h>

int main(){
    int n, m;
    scanf("%d%d", &n, &m);

    int sum = 0;
    for(int i = 0; i < n; i++){
        sum = 0;
        for(int j = 0; j < m; j++){
            int x;
            scanf("%d", &x);
            sum += x;
        }
        printf("%.6lf\n", 1.0 * sum / m);
    }

    return 0;
}

队列列求和

题目描述 ​ :
理工学院的老师让同学们排成了一个 n∗m 的长方形队列,每一个同学手里都拿了一个捐款袋,袋子里面有一定数量的硬币。​
现已知所有同学的捐款袋里面的钱数,数值为整数,单位:元。要求输出每一列同学捐款袋里面的钱数的和。

输入 输入共有 n+1 行:

第一行有两个整数 n,m,分别表示长方形队列中的学生行、列数(0<N≤30 ) 之后 n 行每行有 m
个由空格分隔的整数,分别表示长方形队列中对应位置同学身上捐款 袋里面的钱数(大于等于 0 ,小于 200​ ),单位:元。 输出 输出共有
m 行,每行一个整数,为每一列所有同学捐款袋里面的钱数总和。

样例输入
2 3 1 2 3 2 4 2
样例输出
3 6 5

#include<stdio.h>

int arr[35][35];

int main(){
    int n,m;
    scanf("%d%d", &n, &m);

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            scanf("%d", &arr[i][j]);
        }
    }

    int sum = 0;
    for(int i = 0; i < m; i++){
        sum = 0;
        for(int j = 0; j < n; j++){
            sum += arr[j][i]; 
        }
        printf("%d\n", sum);
    }

    return 0;
}

回形方阵

题目描述 ​ :
输入一个正整数n,输出n×n的回形方阵。例如,n=5时,输出:

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
输入 ​
一行一个正整数n,2≤n≤9​。

输出 ​ 共n行,每行包含n个正整数,之间用一个空格隔开。

样例输入
5
样例输出
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

#include<stdio.h>

int num[10][10];

int main(){
    int n, x = 1;
    scanf("%d", &n);

    for(int i = 1, I = (n + 1) / 2; i <= I; i++){
        for(int j = i; j <= n - i + 1; j++){
            for(int k = i; k <= n - i + 1; k++){
                    num[j][k] = x;
            }
        }
        ++x;
    }

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            j == 1 || printf(" ");
            printf("%d", num[i][j]);
        }
        printf("\n");
    }

    return 0;
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值