PTA团体程序设计天梯赛—练习集—L1-017 到底有多二 (15 分)【C / C++ / Python】

这篇博客介绍了如何计算一个整数中数字2出现的频率与位数比例,即‘二’的程度。提供了三种不同的编程实现:C语言、C++和Python,分别计算给定整数的犯二程度,并输出结果保留两位小数。示例中给出了计算-13142223336这个数的犯二程度,结果为81.82%。
摘要由CSDN通过智能技术生成

L1-017 到底有多二 (15 分)

*文章提供者:海南师范大学 ---- 人工智能教育协会 ---- 周雨歆、刘婧怡、王垚儒

(一)题目要求

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

输入格式:

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

输出格式:

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

输入样例1:

-13142223336

输出样例1:

81.82%

(二)代码如下:

方法一:(C)

#include<stdio.h>
#include<string.h>
#define MAXSIZE 60 

int main(){
	char a[MAXSIZE];			//字符型数组存储字符串 
	float n=0;					//浮点型数据n存储数组中包含2的数量 
	float degree;				//degree表示2的程度 
	scanf("%s",&a);
	float length = strlen(a);	//length存储数组a的长度 
	
	for(int i = 0; i < length; i++){	//for循环遍历数组,判断元素是否为2 
		if(a[i] == '2'){
			n=n+1;						//如果判断为2,则n+1 
		}
	}
	if(a[0] == '-'){							//负数只和a[0]有关,如果a[0]是'-',则该数为负数 
		degree = (double)n/(length-1) * 1.5;	//第一位除去,按length-1作为数字位数 
	}
	else{
		degree = (double)n/length;				//正数则length为数字位数 
	}
	if(a[(int)length-1]%2 == 0){				//此处判断是否为偶数,通过最后一位数奇偶判断(对2取余),(int)为强转整型 
		degree = degree * 2.0;
	}
	
	degree = degree *100;						//打印结果为百分制,扩大100倍 
	printf("%.2f%%",degree);					//'%%'为打印'%'号 
	
	return 0;
}

方法二:(C++)

#include<iostream>
#include<iomanip>
#include<string>
using namespace std;

int main(){
    int count=0, n;// cout用于计算输入中2的个数
    string arr; //定义字符串数组存放输入 
    float result=1, result1=1;//result1记录输入为偶数的结果 ,result记录输入为负数的结果    
    cin>>arr;
    n = arr.size();//获取数组长度赋值给n 
    if((arr[n-1]-'0')%2==0){//判断数组最后一位是否为偶数 
        result1 += 1;
    }
    for(int i;i<n;i++){//用for循环遍历数组查找2的个数 
        if(arr[i]=='2'){
            count++;
        }
    }
    if(arr[0]=='-'){//判断有无负号依据题目将结果翻倍 
        result += 0.5;
        n--;
    }
	
    result1=(double)count/n*result*result1*100;
    cout<<setiosflags(ios::fixed)<<setprecision(2);//结果保留两位小数 
	cout<<result1<<"%"<<endl; 
	
    return 0;
}

方法三:(Python)

a = input()    #输入一个整数
b = 1    #正负数判断条件
m = 1    #奇偶数判断条件
n = 0    #整数中包含“2”的个数
num = len(str(abs(int(a))))    #判断输入数字的长度——位数
if int(a) < 0:    #正负判断
    b += 0.5
if int(a) % 2 == 0:    #奇偶判断
    m += 1
for x in a:    #“2”个数判断
    if "2" == x:
        n += 1
c = n / num * b* m * 100    #计算规则
print("{:.2f}%".format(c))

诚挚希望有心者指正,渴望简单的方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值