【PTA-C语言】实验六-二维数组与字符数组

  • 如果代码存在问题,麻烦大家指正 ~ ~
  • 有帮助麻烦点个赞 ~ ~

    实验六-二维数组与字符数组

    • 7-1 矩阵运算(分数 15)
    • 7-2 求矩阵的局部极大值(分数 15)
    • 7-3 字符串排序(分数 20)
    • 7-4 组个最小数(分数 20)
    • 7-5 统计一行文本的单词个数(分数 15)
    • 7-6 打PTA(分数 15)

7-1 矩阵运算(分数 15)

作者 C课程组
单位 浙江大学

给定一个 n × n n×n n×n 的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

输入格式:
输入第一行给出正整数 n ( 1 < n ≤ 10 ) n(1n1<n10;随后n行,每行给出 n n n 个整数,其间以空格分隔。

输出格式:
在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

输入样例:

4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

输出样例:

35

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
int main()
{
    int n, i, j, a[10][10], sum1=0, sum2=0;
    scanf("%d",&n);
    for(i=0; i<n; i++)
        for(j=n-1; j>=0; j--) {
            scanf("%d", &a[i][j]);
            sum2+=a[i][j];
        }
        for(j=0;j<n;j++) {
            sum1 += a[j][j];
            sum1 += a[n-1][j];
            sum1 += a[j][0];
        }
    sum1 = sum1-a[0][0]-a[n-1][n-1]-a[n-1][0];
    printf("%d", sum2-sum1);
    return 0;
}

7-2 求矩阵的局部极大值(分数 15)

作者 徐镜春
单位 浙江大学

给定 M M M N N N列的整数矩阵 A A A,如果 A A A的非边界元素 A [ i ] [ j ] A[i][j] A[i][j]大于相邻的上下左右4个元素,那么就称元素 A [ i ] [ j ] A[i][j] A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

输入格式:
输入在第一行中给出矩阵 A A A 的行数 M M M 和列数 N ( 3 ≤ M , N ≤ 20 ) N(3≤M,N≤20) N3M,N20;最后 M M M 行,每行给出 A A A 在该行的 N N N 个元素的值。数字间以空格分隔。

输出格式:
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

输入样例1:

4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1

输出样例1:

9 2 3
5 3 2
5 3 4

输入样例2:

3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1

输出样例2:

None 3 5

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
int main()
{
    int m, n, i, j, k, a[20][20];
    while(scanf("%d%d\n", &m, &n) != EOF) {
        for(i=0; i<m; i++)
            for(j=0; j<n; j++)
                scanf("%d", &a[i][j]);
        for(i=1, k=0; i<m-1; i++)
            for(j=1; j<n-1; j++)
                if(a[i][j]>a[i-1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i][j+1]) {
                    printf("%d %d %d\n", a[i][j], i+1, j+1);
                    k=1;
                }
        if(k==0) printf("None %d %d\n", m, n);
    }
    return 0;
}

7-3 字符串排序(分数 20)

作者 张泳
单位 浙大城市学院

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:
按照以下格式输出排序后的结果:

After sorted:

每行一个字符串
输入样例:

red yellow blue black white

输出样例:

After sorted:
black
blue
red
white
yellow

鸣谢贵州民族大学张玉全老师修正数据!

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
#include
int main()
{
    char a[5][80], t[80];
    int i, j, N=5;
    for(i=0; i<N; i++)
        scanf("%s",a[i]);
    for(i=1; i<N; i++)
        for(j=0; j<N-i; j++){
            if(strcmp(a[j],a[j+1])>0){
                strcpy(t ,a[j]);
                strcpy(a[j], a[j+1]);
                strcpy(a[j+1], t);
            }
        }
    printf("After sorted:\n");
    for(i=0; i<N; i++){
        printf("%s\n", a[i]);
    }
    return 0;
}

7-4 组个最小数(分数 20)

作者 曹鹏
单位 Google

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:
输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。

输出格式:
在一行中输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

输出样例:

10015558

代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB

参考代码

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

7-5 统计一行文本的单词个数(分数 15)

作者 张彤彧
单位 浙江大学

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:
输入给出一行字符。

输出格式:
在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

鸣谢用户 张麦麦 补充数据!

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
#include
int main()
{
    int i, j, n, count=0;
    char a[1000];
    gets(a);
    n=strlen(a);
    if(a[0] != ' ')
        count++;
    for(i=0; i<n-1; i++)
        if(a[i]==' ' && a[i+1]!=' ')
            count++;
    printf("%d", count);
    return 0;
}

7-6 打PTA(分数 15)

作者 陈越
单位 浙江大学

【PTA-C语言】实验六-二维数组与字符数组_第1张图片

传说这是集美大学的学生对话。本题要求你做一个简单的自动问答机,对任何一个问句,只要其中包含 PTA 就回答 Yes!,其他一概回答 No.

输入格式:
输入第一行给出一个整型范围内的正整数 N,随后 N 行,每行给出一个长度不超过 80 的字符串,为用户输入的句子,由英文字母、数字、空格和标点符号组成,以回车结束。

输出格式:
对每一行句子,如果其结尾字符为问号 ? 则判断此句中有无 PTA?如果有则在一行中输出 Yes!,否则输出 No.。如果不是问号结尾,则敷衍地回答 enen

输入样例:

5
Hello!
Do you still play WZRY?
Chi Ji?
you play PTA ah?
how about pta site?

输出样例:

enen
No.
No.
Yes!
No.

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include 
#include 
int main()
{
    int n;
    char s[100];
    scanf("%d", &n);
    getchar();
    while (n--)
    {
        fgets(s, sizeof(s), stdin);
        int flag = 0;
        if (s[strlen(s) - 2] != '?')
            printf("enen\n");
        else {
            if (strstr(s, "PTA") != NULL)
                flag = 1;
            if (flag == 0)
                printf("No.\n");
            else
                printf("Yes!\n");
        }
    }
    return 0;
}

你可能感兴趣的:(数据结构与算法,PTA,c语言,算法,数据结构,PTA,开发语言)