1736 - 会员分组

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

小明是学校电子竞技协会的会长,他想过一段时间组织一次协会内部的电子竞技比赛。但是为了让会员们能够尽量与自己实力相当的人比赛,小明决定将会员们按照当前的会员积分分成若干组,分组的方法如下:
(1)对于一个会员,如果他的积分小于等于10,则分到“1”组;
(2)如果一个会员积分大于10,则先把其积分按照四舍五入的原则近似到整十数,例如,一个会员的积分为14,则近似到10,积分为15,则近似到20,积分为99,则近似到100;然后,上一步近似后的积分如果大于100,则再将积分按照四舍五入的原则近似到整百数;再然后,上一步近似后的积分如果大于1000,则再将积分按照四舍五入的原则近似到整千数,依此类推,直到不能近似为止,最后的结果即为这个会员被分到的组。
具体例子请参考输入输出样例。

题目输入

输入的第一行为一个整数n(1<=n<=100),表示测试数据的组数。
接下来n行,每行输入一个整数x(0<=x<=99999999),表示一个会员的积分。

题目输出

对于每个输入的会员积分,输出该会员被分到的组。

输入/输出样例

输入格式

9
15
14
4
5
99
12345678
44444445
1445
446

输出格式

20
10
1
1
100
10000000
50000000
2000
500

C语言解答

#include<stdio.h>
#include<math.h>
int main()
{
	int t,n;
	double a;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lf",&a);
		n=1;
		if(a<=10){printf("1\n");continue;}
		while(a>=10)
		{
			a+=5;
			a/=10;
			a=floor(a);
			n*=10;
		}
		printf("%d\n",(int)(a*n));
	}
	return 0;
}

C++解答

#include <stdio.h>

int main() {
	int t, n, k;
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		if (n <= 10) {
			puts("1");
			continue;
		}
		k = 1;
		while (1) {
			k *= 10;
			if (k > n)
				break;
			if (n % k >= k / 2)
				n = (n / k + 1) * k;
			else
				n = n / k * k;
		}
		printf("%d\n", n);
	}
	return 0;
}