PTA 团体程序设计天梯赛-练习集 L1-002 打印沙漏 L1-003 个位数统计

重温一下PTA团体程序设计天梯赛-练习集,有意思的题目分享下自己的思路,也希望能学到更简单的思路


L1~002

思路:

1.用数学思维,可以看出这是个数列题,沙漏所需要的符号数为1+3×2+5×2+7×2+......,这是高中数学中的Sn也就是数列和,而An的式子如下:

                                                An=1,n=1时

                                                An=2×( 2n-1 )=4n-2,n>=1时

所以等差数列Sn=2n²-1,接下来我们要判断输入的数字应该停在“n等于几”,即2n²-1>“输入的数字”时,打印一个这样的沙漏需要2(n-1)²-1个符号,而 “输入的数字”-(2(n-1)²-1)就是要输出在沙漏下面的“多出的符号的数量”。

2.要打印沙漏,很容易看出来这是个二重循环,外循环是行用下标i(因为),内循环是列用下标j,每行打印的符号数为An=2n-1个,只不过每打印一行n就减一。单独打印上面的三角形的代码:

    for(j=number=--i;j>0;j--)//上面的三角形
    {    //其中i即n,number为i-1,j为变化的n
        for(i=number-j;i>0;i--)//打印空格
            printf(" ");
        for(i=1;i<=2*j-1;i++)//打印符号
            printf("%c",ch);
        printf("\n");
    }

同理,下面的三角形的代码:

    for(j=2;j<=number;j++)//下面
    {
        for(i=number-j;i>0;i--)
            printf(" ");
        for(i=1;i<=2*j-1;i++)
            printf("%c",ch);
        printf("\n");
    }

完整代码:

#include <stdio.h>
int main()
{
	int n,number,i,j;
    char ch;
    scanf("%d %c",&n,&ch);
    for(i=1;;i++)
        if(n<2*i*i-1) break;
    for(j=number=--i;j>0;j--)//上面
    {
        for(i=number-j;i>0;i--)
            printf(" ");
        for(i=1;i<=2*j-1;i++)
            printf("%c",ch);
        printf("\n");
    }
    for(j=2;j<=number;j++)//下面
    {
        for(i=number-j;i>0;i--)
            printf(" ");
        for(i=1;i<=2*j-1;i++)
            printf("%c",ch);
        printf("\n");
    }
    printf("%d",n-2*number*number+1);
    return 0;
}


L1~003

 思路

先定义一个全局数组a[11],再把输入的一串数字当成char字符类型,再储存到int的命名为a[11]的数组里面,即:

    while(1)
    {
        ch=getchar();
        if(ch==10) break;//ASCII码10是回车
        else a[ch-'0']++;//ch-'0'就是数字
    }     //如8的字符char类型-'0'就是数字8

之后a[n]中a[n]为几,就说明有几个“数字为n的数”,如果a[2]=3,就说明有3

个数字2,最后打印出来即可。

完整代码:

#include <stdio.h>
int a[11];
int main()
{
    int i;
    char ch;
    while(1)
    {
        ch=getchar();
        if(ch==10) break;
        else a[ch-'0']++;
    }
    for(i=0;i<10;i++)
        if(a[i]!=0) printf("%d:%d\n",i,a[i]);
    return 0;
}

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,这段代码是用来统计输入数字中奇数和偶数的个数的。代码中使用循环遍历输入的数字,通过对2取模运算来判断数字是奇数还是偶数,然后分别对奇数和偶数的计数变量进行加一操作。循环结束后,输出奇数计数变量和偶数计数变量的值,中间用空格隔开。\[1\]\[2\]\[3\] 这段代码可以用来解决团体程序设计天梯赛-练习 L1-022 奇偶分家的问题。 #### 引用[.reference_title] - *1* [PTA团队天梯赛L1-022 奇偶分家](https://blog.csdn.net/m0_46492118/article/details/114481127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [PAT团队程序设计天梯赛-习题L1-022 奇偶分家](https://blog.csdn.net/qq_38234015/article/details/81291913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [团体程序设计天梯赛-练习 L1-022 奇偶分家 (10分)(C语言)](https://blog.csdn.net/Baridhu/article/details/109899606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值