PTA 课外练习题目

7-1 矩阵运算  分数 20

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

输入格式:

输入第一行给出正整数n(1<n≤10);随后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<stdio.h>

int main(){
    int N, A[10][10];
    int i,j, sum=0;
    scanf("%d", &N);
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            scanf("%d", &A[i][j]);
    for(i=0;i<N-1;i++)
        for(j=0;j<N-1;j++)
            if(j!=N-i-1)
                sum+=A[i][j];
    printf("%d", sum);
    
    return 0;
} 

7-2 查找指定字符  分数 15

本题要求编写程序,从给定字符串中查找某指定的字符。

输入格式:

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。

输出格式:

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入样例1:

m
programming

输出样例1:

index = 7

输入样例2:

a
1234

输出样例2:

Not Found

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

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

int main(){
    char ch,A[82];
    int i,r=1;
    scanf("%c ", &ch);
    gets(A);
    for(i=strlen(A)-1;i>=0;i--)
        if(A[i]==ch){
            r=0;
            break;
        }
    if(r)
        puts("Not Found");
    else
        printf("index = %d", i);
    
    return 0;
}

7-3 统计一行文本的单词个数  分数 15

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

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
int main(){
    char A[500000];
    int r=0;
    while(scanf("%s", A)!=EOF)
        r++;
    printf("%d", r);
    
    return 0;
}

7-4 字符串排序  分数 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<stdio.h>
#include<string.h>

int main(){
    int i,j,r;
    char A[5][100];
    char* C[5];
    char* B;
    for(i=0;i<5;i++)
        scanf("%s", A[i]);
    for(i=0;i<5;i++)
        C[i]=A[i];
    for(i=0;i<4;i++){
        r=1;
        for(j=0;j<4-i;j++)
            if(strcmp(C[j], C[j+1])>0){
                B=C[j];
                C[j]=C[j+1];
                C[j+1]=B;
                r=0;
            }
        if(r)
            break;
    }
    puts("After sorted:");
    for(i=0;i<5;i++)
        puts(C[i]);
    
    return 0;
}

7-5 螺旋方阵  分数 20

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:

输入在一行中给出一个正整数N(<10)。

输出格式:

输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

输入样例:

5

输出样例:

  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
int main(){
    int N,x=1, i,j;
    scanf("%d", &N);
    int left=0,right=N-1,up=0,down=N-1;
    int A[9][9];
    while(x<=N*N){
        for(i=left;i<=right;i++)
            A[up][i]=x++;
        up++;
        for(i=up;i<=down;i++)
            A[i][right]=x++;
        right--;
        for(i=right;i>=left;i--)
            A[down][i]=x++;
        down--;
        for(i=down;i>=up;i--)
            A[i][left]=x++;
        left++;
    }
    for(i=0;i<N;i++){
        for(j=0;j<N;j++)
            printf("%3d", A[i][j]);
        putchar('\n');
    }
    return 0;
}

7-6 删除重复字符  分数 20

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:

输出去重排序后的结果字符串。

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
#include<string.h>
void s_gets(char* , int);
void sort(char* st);
void del(char* st);

int main(){
    int i;
    char A[85];
    s_gets(A, 80);
    del(A);
    sort(A);
    printf("%s", A);
    return 0;
}
void del(char* A){
    char B[81];
    int i,j,t=0,r;
    for(i=0;i<strlen(A);i++){
        r=1;
        for(j=0;j<i;j++)
            if(B[j]==A[i]){
                r=0;
                break;
            }
        if(r){
            B[t]=A[i];
            t++;
        }
    }
    B[t]='\0';
    strcpy(A, B);
}
void sort(char* A){
    int i,j,r;
    char t;
    for(i=0;i<strlen(A)-1;i++){
        r=1;
        for(j=0;j<strlen(A)-1-i;j++)
            if(A[j]>A[j+1]){
                t=A[j];
                A[j]=A[j+1];
                A[j+1]=t;
                r=0;
            }
        if(r)
            break;
    }
}
void s_gets(char* st, int n){
    int i=0;
    char* ret_val;
    ret_val=fgets(st, n, stdin);
    if(ret_val){
        while(st[i]!='\n'&&st[i]!='\0')
            i++;
        if(st[i]=='\n')
            st[i]='\0';
        else
            while(getchar()!='\n')
                continue;
    }
    return ret_val;
}

7-7 统计字符出现次数  分数 20

本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:

输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。

输出格式:

在一行中输出给定字符在给定字符串中出现的次数。

输入样例:

programming is More fun!
m

输出样例:

2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

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

int main(){
    int r=0;
    char ch;
    char S[82];
    fgets(S, 81, stdin);
    scanf("%c", &ch);
    for(int i=0;i<strlen(S);i++)
        if(ch==S[i])
            r++;
    printf("%d", r);
    
    return 0;
}

7-8 谷歌的招聘  分数 20

2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。

自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921... 其中粗体标出的 10 位数就是答案。

本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。

输入格式:

输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。

输出格式:

在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。

输入样例 1:

20 5
23654987725541023819

输出样例 1:

49877

输入样例 2:

10 3
2468001680

输出样例 2:

404

鸣谢用户 大冰 补充数据!

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int Prime(int);
int plus(int* , int);

int main(){
    int L,K, i,j,k, R, r=1;
    int* N, *S;
    scanf("%d %d ", &L, &K);
    N=(int*)malloc(L*sizeof(int));
    S=(int*)calloc(K, sizeof(int));
    for(int i=0;i<L;i++)
        N[i]=getchar()-48;
    for(i=0;i<L-K+1;i++){
        for(j=i, k=0;j<K+i;j++,k++)
            S[k]=N[j];
        R=plus(S, K);
        if(Prime(R)){
            r=0;
            break;
        }
    }
    if(r)
        printf("404");
    else
        for(j=i;j<i+K;j++)
            printf("%d", N[j]);
    
    return 0;
}
int plus(int* A, int r){
    int sum=0,i,j;
    for(i=0,j=r-1;i<r;i++,j--)
        sum+=A[i]*pow(10, j);
    return sum;
}
int Prime(int N){
    if(N<2)
        return 0;
    for(int i=2;i*i<=N;i++)
        if(N%i==0)
            return 0;
    return 1;
}

7-9 敲笨钟  分数 20

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。

现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。

输入格式:

输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。

输出格式:

对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。

输入样例:

5
xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong.
tian sheng wo cai bi you yong, qian jin san jin huan fu lai.
xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long.
zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong.
ren xian gui hua luo, ye jing chun shan kong.

输出样例:

xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong.
Skipped
xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong.
Skipped
Skipped

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
#include<string.h>
#include<stdbool.h>
void s_gets(char*, int);

int main() {
    int N, i, j, k, r, t, u, L;
    char ch;
    char S[] = "qiao ben zhong.";
    char A[21][120];
    scanf("%d ", &N);
    for (i = 0; i < N; i++) {
        bool P = false, Q = false;
        s_gets(A[i], 101);
        L = strlen(A[i]);

        for (r = L - 1;; r--)//r为,位置
            if (A[i][r] == ',')
                break;
        if (A[i][L - 2] == 'g' && A[i][L - 3] == 'n' && A[i][L - 4] == 'o')
            P = true;
        if (A[i][r - 1] == 'g' && A[i][r - 2] == 'n' && A[i][r - 3] == 'o')
            Q = true;

        if (P && Q) {
            for (j = L - 1, t = 0; A[i][j] != ','; j--) {//j为空格位置(不足3空格为逗号位置)
                if (A[i][j] == ' ')
                    t++;
                if (t == 3)
                    break;
            }
            for (r = 0; r < j + 1; r++)
                putchar(A[i][r]);
            puts(S);
        }
        else
            puts("Skipped");
    }
    return 0;
}
void s_gets(char* st, int n) {
    int i = 0;
    char* ret_val;
    ret_val = fgets(st, n, stdin);
    if (ret_val) {
        while (st[i] != '\n' && st[i] != '\0')
            i++;
        if (st[i] == '\n')
            st[i] = '\0';
        else
            while (getchar() != '\n')
                continue;
    }
}

7-10 凯撒密码  分数 20

为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。

输入格式:

输入第一行给出一个以回车结束的非空字符串(少于80个字符);第二行输入一个整数offset。

输出格式:

输出加密后的结果字符串。

输入样例1:

Hello Hangzhou
2

输出样例1:

Jgnnq Jcpibjqw

输入样例2:

a=x+y
-1

输出样例2:

z=w+x

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void s_gets(char*, int);

int main(){
    int R,i;
    char A[85];
    s_gets(A, 81);
    scanf("%d", &R);
    R%=26;
    for(i=0;i<strlen(A);i++){
        if(isupper(A[i])){
            if(A[i]+R>90)
                A[i]=64+R-('Z'-A[i]);
            else if(A[i]+R<65)
                A[i]=91+R+(A[i]-'A');
            else
                A[i]+=R;
        }
        else if(islower(A[i])){
            if(A[i]+R>122)
                A[i]=96+R-('z'-A[i]);
            else if(A[i]+R<97)
                A[i]=123+R+(A[i]-'a');
            else
                A[i]+=R;
        }
        putchar(A[i]);
    }
    
    return 0;
}
void s_gets(char* st, int n){
    int i=0;
    char* ret_val;
    ret_val=fgets(st, n, stdin);
    if(ret_val){
        while(st[i]!='\n'&&st[i]!='\0')
            i++;
        if(st[i]=='\n')
            st[i]='\0';
        else
            while(getchar()!='\n')
                continue;
    }
    return ret_val;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值