鱼C论坛

 找回密码
 立即注册
查看: 2647|回复: 1

PTA L1-017 到底有多二 帮忙改错

[复制链接]
发表于 2022-11-24 20:09:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作者 陈越

单位 浙江大学

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:
输入第一行给出一个不超过50位的整数N。

输出格式:
在一行中输出N犯二的程度,保留小数点后两位。

输入样例:
-13142223336
输出样例:
81.82%
鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

我的代码:

#include<stdio.h>
#include<string.h>
main()
{
    char n[52];
    int gs=0,bs=1;//gs 2的个数,bs倍数
    double cd;//犯二的程度
    scanf("%s",&n);
    int k=strlen(n);//位数
    if(n[0]=='-'){
            k=strlen(n)-1;
        }
    for(int i=0;i<k;i++){
        if(n[i]=='2'){
            gs++;
        }
    }
    if(n[strlen(n)]%2==0){
        cd=(gs*1.0)/(k*1.0)*2;
        }
    if(n[0]=='-'){
        cd=(gs*1.0)/(k*1.0)*2*1.5;
        }else{
            cd=(gs*1.0)/(k*1.0)*2;
        }
    printf("%.2f%%",cd*100);
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-24 21:28:05 | 显示全部楼层
#include<stdio.h>
int main()
{
        char ch[51]={0};
        scanf("%s",ch);
        int i=0;
        float sum2=0,sum=1;
        while(ch[i])
        {
            if(ch[i]=='2')sum2+=1;
            i+=1;
        }

        if(0==ch[i-1]%2)sum*=2;
        if('-'==ch[0])sum*=1.5,i-=1;


        printf("%%%.2f",sum2/i*sum*100);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 10:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表