日剧与挂机游戏"/>
日剧与挂机游戏
Description
banfcc最近迷上了一款挂机游戏。
这个游戏挂1分钟升到1级,再挂10分钟升到2级,再挂100分钟升到3级,以此类推……
因为banfcc还要肝日剧,所以很久没有管这个游戏,现在告诉你他挂机了多久,聪明的小朋友能算出他已经几级了吗?
Input
多组数据
第一行一个T(1<=T<=1000)代表数据组数
接下来T行每行一个数字n代表挂机的时间(0<=n<=101000)
保证没有前导0
Output
一个整数k代表等级数
Sample Input
13
0
1
10
11
10000
90000
11211
11109
11201
11111111111111111111
123456789123456789123456789123456789123456789
10211
210
Sample Output
0
1
1
2
4
5
5
4
5
20
45
4
3
思路:
因为输入较大,数值类型实现不了,所以得用字符串类型,存储在数组里也方便读取某个位上的值。
1级是1分钟,2级是11分钟,3级是111分钟,四级是1111分钟,n级就是nnn…n(n个 n)分钟。
核心是判断这个输入的数是大于等于1111…11(n个1),小于1111…11(n+1个1),便可判断出这个数是n级
我们可以弄个循环,从第一位开始往后逐个取出当前位置的数进行判断。
首先看第一位就可大致判断出有多少级。
如果第一位是大于1的数,那么这个输入的数肯定大于1111…11(n个1),小于1111…1(n+1个1),也就是n级,还不到n+1级,可以直接输出,跳出循环了。
如果第一位等于1,就得往后看,如果接下来的位上是大于1的数,输入的数也就同上,大于1111…11(n个1),小于1111…11(n+1个1),等级也同上,为n级,可输出后退出循环。
以此类推。
但若从第二位开始,前面都是1,后面有位上的数是0,那说明这个数是小于1111…11(n个1)的,但是大于1111…11(n-1个1),同样也可以直接输出,跳出循环。
如果每个位上都是1,那就是等于1111…11(n个1)了,为n级。
#include<stdio.h>
#include<string.h>
int main(){int i,j,n,t,s;scanf("%d",&t);char x[1010];while(t--){scanf("%s",x);n=strlen(x);s=n;for(i=0;i<n;i++){if(x[i]>49)//大于1{printf("%d\n",s);//大于1111.....11(s个1)了,直接输出break;}else if(x[i]==48){//等于0s--;//小于1111.....11(s个1)了,减去1后直接输出printf("%d\n",s);break;}if(i==n-1&&x[i]==49)//如果全都是1printf("%d\n",s);}}return 0;
}
更多推荐
日剧与挂机游戏
发布评论