L1-017 到底有多二
Statement
Metadata
- 作者: 陈越
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:
输入格式
输入第一行给出一个不超过50位的整数N
。
输出格式
在一行中输出N
犯二的程度,保留小数点后两位。
输入样例
输出样例
鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!
Solution
#include <ctype.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
typedef long long LL;
const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;
const int MAXN = 0x3f3f3f3f;
const int MINN = 0xc0c0c0c0;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7;
int main() {
string s;
cin >> s;
int len = s.size();
int flag[2] = {0};
int vis = 0;
for (int i = 0; i < len; i++) {
if (s[i] == '-') {
flag[0] = 1;
} else {
if (s[i] == '2')
vis++;
if (i == len - 1 && s[i] % 2 == 0)
flag[1] = 1;
}
}
double ans = 0.0;
if (flag[0])
ans = vis * 1.0 / (len - 1) * 1.5;
else
ans = vis * 1.0 / len;
if (flag[1])
ans *= 2;
printf("%.2lf%%\n", ans * 100);
}
Last update: May 4, 2022