【PTA-C语言】编程练习4 - 数组Ⅱ

这篇具有很好参考价值的文章主要介绍了【PTA-C语言】编程练习4 - 数组Ⅱ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

7-8 2048游戏模拟(2)–向下移位合并(分数 15)

作者 李民
单位 武汉理工大学

本题模拟2048游戏的规则,提供4X4个格子,输入每个格子的初始值(空白格子值为0),玩家选择向下移动,所有数字向下靠拢,相同的数字相撞时会合并。移动结束后,输出合并后的数值。

输入格式:
分4行,每行输入4个整数,分别表示格子中的初值,数据之间用空格分隔。

输出格式:
分4行,输出移动合并后的数据,每个数之间有一个空格,行末无空格。

输入样例:

2 0 2 2
2 2 4 4
0 2 0 2
4 0 0 4

输出样例:

0 0 0 2
0 0 0 4
4 0 2 2
4 4 4 4

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

参考代码文章来源地址https://www.toymoban.com/news/detail-771328.html

#include <stdio.h>
int main()
{
    int i, j, temp, k, count, a[4][4];
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            scanf("%d",&a[i][j]);
    for(k=0;k<=3;k++)
        for(j=0;j<=3;j++)
            for(i=0;i<=3-j;i++)
                if(a[i][k]==0&&i-1>=0) {
                    temp=a[i][k];
                    a[i][k]=a[i-1][k];
                    a[i-1][k]=temp;
                }
    for(k=0;k<=3;k++)
        for(i=3;i>=0;i--)
            if(a[i][k]==a[i-1][k]) {
                a[i][k]+=a[i-1][k];
                a[i-1][k]=0;
                }
    for(k=0;k<=3;k++)
        for(j=0;j<=3;j++)
            for(i=0;i<=3-j;i++)
                if(a[i][k]==0&&i-1>=0) {
                    temp = a[i-1][k];
                    a[i-1][k] = a[i][k];
                    a[i][k] = temp;
                }
    for(k=0;k<=3;k++)
        for(i=0;i<=3;i++)
            if(count!=3) {
                printf("%d ",a[k][i]);
                count++;
            } else {
                printf("%d\n",a[k][i]);
                count=0;
            }
    return 0;
}

7-9 二进制数据转换成十进制数(分数 15)

作者 汤练兵
单位 武汉理工大学

输入1个无符号二进制数串,编写程序将其转换成对应的十进制数,并输出。

输入格式:
输入1个二进制数串(至少1位且不超过16位)。

输出格式:
输出转换后的十进制数。

输入样例:

0110110001100

输出样例:

3468

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

参考代码

#include <stdio.h>
#include <math.h>
int main()
{
    char a[17];
    gets(a);
    int i, n = strlen(a), k, sum=0;
    for(i=n-1,k=0; i>=0; i--,k++)
        sum += (a[i]-48)*pow(2,k);
    printf("%d", sum);
    return 0;
}

7-10 英文单词排序(分数 15)

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

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple
#

输出样例:

red blue green yellow purple 

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

参考代码

#include<stdio.h>
#include<string.h>
int main(){
    int i, j, k;
    char a[30][20], temp[20];
    for(i=0;i<20;i++) {
        gets(a[i]);
        if(a[i][0]=='#')
            break;
    }
    for(k=0;k<i-1;k++)
        for(j=0;j<i-k-1;j++)
            if(strlen(a[j])>strlen(a[j+1])) {
                strcpy(temp, a[j]);
                strcpy(a[j], a[j+1]);
                strcpy(a[j+1], temp);
            }
    for(j=0;j<i;j++)
        printf("%s ", a[j]);
    return 0;
}

7-11 统计单词的长度(分数 15)

作者 颜晖
单位 浙大城市学院

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

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

输出格式:
在一行中输出每个单词的长度。每个数字后有一个空格。

输入样例:

How are you?

输出样例:

3 3 4 

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

参考代码

#include<stdio.h>
int main()
{
    int i=0, n=0;
    char b;
    scanf("%c", &b);
    if(b!=' ') n++;
    while(b != '\n') {
        scanf("%c", &b);
        if(b!=' ' &&b !='\n') n++;
        if(n!=0 && b==' ' || b=='\n') {
            if(n) {
                printf("%d ", n);
                i=1;
            }
            n=0;
        }
    }
    if(i!=1)
        printf("0 ");
    return 0;
}

7-12 来验证我们的身份证吧(分数 15)

作者 孙骏
单位 武汉理工大学

咱们的身份证号码由18位字符组成,其中17位为地区、日期编号和顺序编号,最后1位为校验码。

校验码的计算规则如下:

首先求出前17位数字的加权和S,权重分配按顺序为:{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
然后将计算的和S对11取模得到值Z;
最后按照以下关系对应Z值与校验码M的值:
Z: 0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

例如:对于身份证号420111200001014148,按权重累加和S为:

4×7+2×9+0×10+1×5+…+4×8+1×4+4×2=125

由此计算 Z=S%11=4

对应的M值为 8 ,即校验位值为8,与输入的身份证号最后一位相同,故上述身份证号正确。若M值与身份证最后一位不同,则身份证号有问题。

本题给出一些身份证号码,请你验证校验码是否正确。若身份证号有问题,则输出该号码。

输入格式:
第1行输入需判断的身份证号码条数N(0<N<=10)。从第2行开始,每行输入一条身份证号。

输出格式:
每行输出一条不正确的身份证号。

若全部正确,输出"全部正确!"。

输入样例 1:

3
420106197107251007
310111196602231020
602402200311154723

输出样例 1:

全部正确!

输入样例 2:

2
42010619710725100X
220111196302231027

输出样例 2:

42010619710725100X

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

参考代码

#include <stdio.h>
int main(){
    int sum, Z, n, i, count = 0, j, k, weight[] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 }, wrong = 0;
    char M[] = { '1','0','X','9','8','7','6','5','4','3','2' }, id[100][20];
    scanf("%d", &n);
    for(i = 0; i < n; i++) {
        sum = 0;
        scanf("%s", id[i]);
        for(j = 0; j < 18; j++)
            if(j < 17) {
                if(id[i][j] >= '0' && id[i][j] <= '9')
                    sum += (id[i][j] - '0') * weight[j];
                else {
                    wrong = 1;
                    break;
                }
            } else {
                Z = sum % 11;
                if (id[i][j] != M[Z])
                    wrong = 1;
            }
        if(wrong) {
            printf("%s\n", id[i]);
            count++;
            wrong = 0;
        }
    }
    if(count == 0) printf("全部正确!\n");
    return 0;
}

7-13 将整数按三位分节(分数 15)

作者 李民
单位 武汉理工大学

编写一个程序,将某个位数不确定的非负整数进行三位分节后输出。程序保证数据是不超过4个字节的正整数。

输入格式:
输入一个非负整数,以回车结束输入。

输出格式:
将这个正整数每隔3位就用逗号分隔,然后输出。

输入样例:

1234567

输出样例:

1,234,567

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

参考代码

#include<stdio.h>
#include<string.h>
int main(){
    char a[1000];
    scanf("%s", a);
    int i, t = strlen(a);
    for(i=0; i<t; i++) {
        printf("%c", a[i]);
        if((t-i-1)%3==0 && i!=t-1)
            printf(",");
    }
    printf("\n");
    return 0;
}

7-14 求完全对称日(分数 10)

作者 李民
单位 武汉理工大学

刚进入2020年,网上就流传着2020.02.02是“千年一遇”的对称日(正着读反着读都一样),很多情侣准备选择这一天去登记结婚。事实上,像这样的完全对称日还有很多。
现在来编写一个程序,输入2个年份M、N(1000<=M<=N<=9999),输出M和N之间(包含M、N)的所有完全对称日。如果没有完全对称日,则输出"None"。

输入格式:
输入2个年份M、N(1000<=M<=N<=9999)。

输出格式:
按“年.月.日”的格式输出该年所有的完全对称日。其中年按4位输出,月、日均按2位输出,位数不足则加前导0。每行输出一个完全对称日。

输入样例:

2011 2020

输出样例:

2011.11.02
2020.02.02

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

参考代码

#include <stdio.h>
int main()
{
    int y, mm, day, m, n, result=0;
    scanf("%d %d", &m, &n);
    for(y=m;y<=n;y++)
        for(mm=1;mm<=12;mm++) {
            if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12)
                for(day=1;day<=31;day++)
                    if(y==day%10*1000+day/10*100+mm%10*10+mm/10) {
                        printf("%d.%02d.%02d\n",y,mm,day);
                        result=1;
                    }
            if(mm==4||mm==6||mm==9||mm==11)
                for(day=1;day<=30;day++)
                    if(y==day%10*1000+day/10*100+mm%10*10+mm/10) {
                        printf("%d.%02d.%02d\n", y, mm, day);
                        result=1;
                    }
            if(mm==2) {
                if((y%4==0&&y%100!=0)||(y%400==0)) {
                    for(day=1;day<=29;day++)
                        if(y==day%10*1000+day/10*100+mm%10*10+mm/10) {
                            printf("%d.%02d.%02d\n", y, mm, day);
                            result=1;
                        }
                }
                else
                    for(day=1;day<=28;day++)
                        if(y==day%10*1000+day/10*100+mm%10*10+mm/10) {
                            printf("%d.%02d.%02d\n", y, mm, day);
                            result=1;
                        }
            }
        }
    if(result==0) printf("None");
    return 0;
}

7-15 念数字(分数 10)

作者 翁恺
单位 浙江大学

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

输入格式:
输入在一行中给出一个整数,如:1234

提示:整数包括负数、零和正数。

输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si

输入样例:

-600

输出样例:

fu liu ling ling

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

参考代码

#include<stdio.h>
#include<string.h>
int main()
{
    char num[20];
    scanf("%s", &num);
    int i, n = strlen(num);
    for(i=0; i<n; i++) {
        switch(num[i]) {
            case '-':printf("fu"); break;
            case '0':printf("ling"); break;
            case '1':printf("yi"); break;
            case '2':printf("er"); break;
            case '3':printf("san"); break;
            case '4':printf("si"); break;
            case '5':printf("wu"); break;
            case '6':printf("liu"); break;
            case '7':printf("qi"); break;
            case '8':printf("ba"); break;
            case '9':printf("jiu"); break;
            default: break;
        }
        if(i<n-1) printf(" ");
    }
    return 0;
}

到了这里,关于【PTA-C语言】编程练习4 - 数组Ⅱ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构第7~8章练习答案(PTA)

    2-1适用于折半查找的表的存储方式及元素排列要求为( D ) 。 A.链接方式存储,元素无序 B.链接方式存储,元素有序 C.顺序方式存储,元素无序 D.顺序方式存储,元素有序 2-2在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为

    2024年02月04日
    浏览(27)
  • 数据结构第1~2章练习答案(PTA)

    2-1下面代码段的时间复杂度是( B ) A.O(n)                B.O(n²)                C.O(n³)                D.O(2ⁿ) 2-2下列函数的时间复杂度是( B ) A.O(logn)           B.O()                C.O(n)                 D.O(nlogn)  2-3顺序表是线性表的( B ) A.链式

    2024年02月07日
    浏览(33)
  • 数据结构c语言版:顺序表oj题练习(原地移除元素、合并两个有序数组)

    在单数组里面历遍找val,如果是val,就删除。不是就跳过。 时间复杂度O(n^2),最坏情况每个都是val。相当于一个等差数列。 比如 下标0开始找,0不是,不动数组 下标1,1不是,不动数组 下标2,2是,删除元素,变成【0,1,2,3,0,4,2】 下标2,2是,删除元素,变成【0,

    2024年01月23日
    浏览(54)
  • 数据结构Pta训练题-编程2

    感谢你这么帅(漂亮)​还支持我 一个项目由若干个任务组成,任务之间有先后依赖顺序。项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务。现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工时间。 输入

    2024年02月16日
    浏览(39)
  • 数据结构pta训练题-编程题1

    感谢你这么帅(漂亮)​还支持我 训练网站:PTA训练平台 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

    2024年02月10日
    浏览(33)
  • C/C++数据结构---在一个数组中实现两个堆栈(PTA)

    个人主页 仍有未知等待探索_数据结构,C语言疑难,小项目-CSDN博客 专题分栏---数据结构 数据结构_仍有未知等待探索的博客-CSDN博客 目录 一、前言         二、题目 要求 函数接口定义 裁判测试程序样例 输入样例  输出样例  三、分析  1.栈的特点 2.题目分析  3.栈的创建

    2024年02月08日
    浏览(33)
  • PTA-c语言 输出大写英文字母

    本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。 输入格式: 输入为一个以回车结束的字符串(少于80个字符)。 输出格式: 按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母

    2024年02月04日
    浏览(32)
  • 7-1 回文判断(数据结构) PTA C语言

    回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。 若用C++,可借助STL的容器实现。 输入格式: 输入待判断的字符序列,按回车键结束,字符序列长度20。 输出格式: 若字符序列是

    2024年02月02日
    浏览(34)
  • C语言数据结构一:动态数组

    先说一个概念:数组是一段 连续 的内存空间。存储相同的数据类型。 数组的两个关键点: 连续内存; 相同类型。 首先连续内存:所以为了找到动态数组我们必须找到一个 首元素 地址。(内存 首地址 。) 如果不知道首地址,那无法找到并操作内存空间。 知道首地址了,

    2024年02月06日
    浏览(35)
  • c语言版:数据结构(时间复杂度,空间复杂度,练习)

        时间复杂度是用来衡量算法执行时间的一个指标。它表示随着输入规模的增加,算法执行时间的增长率。时间复杂度通常用大O符号表示。    在计算时间复杂度时,通常会 忽略常数项、低阶项和系数项 , 只关注随着输入规模增长而导致的主要影响。这是因为在实际应用

    2024年01月21日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包