这是一道c语言编程题,我测试的时候都是对的,可是提交的时候却错了。大家帮我看看吧,谢谢
FontSize:←→ProblemDescriptionMichael要给自己的一本已经完成的书编上页码。众所周知,第一页页码是1,第二页页码是2,第三页页码是3,……...
Font Size: ← →
Problem DescriptionMichael要给自己的一本已经完成的书编上页码。众所周知,第一页页码是1,第二页页码是2,第三页页码是 3,……。而Michael敲一次键盘就能打出一个数字,例如打出1需要敲一次键盘,打出10需要敲两次键盘。页码编完之后,Michael记得自己总共敲了 n次键盘,问Michael的书有多少页。 Input输入的第一行是整数T(0 < T <= 100),表示测试数据的组数。每一组测试数据只有一行,只有一个整数n(1 <= n <= 1000),表示Michael敲了n次键盘。该行没有其它多余的符号。 Output如果有解,则输出书的页数。如果无解,输出-1。 下面是我写的代码,哪错了啊
#include<stdio.h>
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int m;
if(n<10)
printf("%d\n",m=n);
else if(n>=10&&n%2==0)
printf("-1\n");
else if(n>10)
printf("%d\n",m=9+(n-9)/2);
}
return 0;
}
这样还是错了,我考虑了3位数的 展开
Problem DescriptionMichael要给自己的一本已经完成的书编上页码。众所周知,第一页页码是1,第二页页码是2,第三页页码是 3,……。而Michael敲一次键盘就能打出一个数字,例如打出1需要敲一次键盘,打出10需要敲两次键盘。页码编完之后,Michael记得自己总共敲了 n次键盘,问Michael的书有多少页。 Input输入的第一行是整数T(0 < T <= 100),表示测试数据的组数。每一组测试数据只有一行,只有一个整数n(1 <= n <= 1000),表示Michael敲了n次键盘。该行没有其它多余的符号。 Output如果有解,则输出书的页数。如果无解,输出-1。 下面是我写的代码,哪错了啊
#include<stdio.h>
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int m;
if(n<10)
printf("%d\n",m=n);
else if(n>=10&&n%2==0)
printf("-1\n");
else if(n>10)
printf("%d\n",m=9+(n-9)/2);
}
return 0;
}
这样还是错了,我考虑了3位数的 展开
1个回答
展开全部
我认为你解决问题的思路就错了,下面是我的想法:设页数为page_cnt,敲击键盘次数为n,在1<=page_cnt<=9时,n = page_cnt, 此时1<=n<=9;在10<=page_cnt<=99时, page_cnt = (n - 9) / 2 + 9, 此时10<=n<=189; 在100<=page_cnt<=999时,page_cnt = (n - 189) / 3 + 99, 此时190<=n<=2889.根据以上推算可以按你的思路编写程序为:
#include <stdio.h>
int main(void)
{
int T, n;
printf("Please input how many groups of data you want to check, it may between 1 and 100: ");
do {
scanf("%d", &T);
if ((T < 1) || (T > 100)) {
printf("You can only check 1 to 100 times\n");
continue;
} else
break;
} while(1);
do {
printf("Please input how many times Michael has hit the keyboard, it may between 1 and 1000: ");
do {
scanf("%d", &n);
if ((n < 1) || (n > 1000)) {
printf("Michael can hit keyboard 1 to 1000 times\n");
continue;
} else
break;
} while (1);
if ((n >= 1) && (n <= 9))
printf("hit keyboard times: %d\tpage numbers: %d\n", n, n);
else if (n <= 189)
printf("hit keyboard times: %d\tpage numbers: %d\n", n, ((n - 9) % 2) ? -1 : (n - 9) / 2 + 9);
else if (n <= 2889)
printf("hit keyboard times: %d\tpage numbers: %d\n", n, ((n - 189) % 3) ? -1 : (n - 189) / 3 + 99);
else
printf("This can't happen\n");
} while(--T);
return 0;
}
#include <stdio.h>
int main(void)
{
int T, n;
printf("Please input how many groups of data you want to check, it may between 1 and 100: ");
do {
scanf("%d", &T);
if ((T < 1) || (T > 100)) {
printf("You can only check 1 to 100 times\n");
continue;
} else
break;
} while(1);
do {
printf("Please input how many times Michael has hit the keyboard, it may between 1 and 1000: ");
do {
scanf("%d", &n);
if ((n < 1) || (n > 1000)) {
printf("Michael can hit keyboard 1 to 1000 times\n");
continue;
} else
break;
} while (1);
if ((n >= 1) && (n <= 9))
printf("hit keyboard times: %d\tpage numbers: %d\n", n, n);
else if (n <= 189)
printf("hit keyboard times: %d\tpage numbers: %d\n", n, ((n - 9) % 2) ? -1 : (n - 9) / 2 + 9);
else if (n <= 2889)
printf("hit keyboard times: %d\tpage numbers: %d\n", n, ((n - 189) % 3) ? -1 : (n - 189) / 3 + 99);
else
printf("This can't happen\n");
} while(--T);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询