题目传送门
解题思路:
这道题通读一遍是一个数学归纳题???
112 1113 11114 111115……1的个数在依次加一,第3个数是2,第3+4个数是3,第3+4+5个数是4……emmmm,我一开始的思路是采用for循环,用i表示第i个数,然后,i+a依次增加,a也在增加,但是这个思路没成功,写了一个死循环,我就放弃了……换了另一个思路是弄一个数组,将所有不输出1的i都放进去,但是不能够输出i个数时,第i个数对应的数是多少。(知识匮乏)……还是选用while循环吧。
接下来讲一下我的while循环的思路,先上代码了:
#include <stdio.h> int main(void) { int n; while(scanf("%d",&n) != EOF){ int sum = 3; int count = 2; int flag = 4; while(1){ if (sum == n){ printf("%d\n",count); break; } else if (sum > n){ printf("1\n"); break; } else{ sum+=flag; flag++; count++; } } }return 0; }
um代表第i个数的i;count是从2开始依次递增的数;flag代表 从2开始依次递增时i的变化;将sum与n进行比较,小的时候,就让sum,count,flag分别递增,直至sum大于等于n。sum大于n就直接输出1即可,等于n就输出count值。
后来for循环代码找到了,果然是我的C语言问题,不是思路问题,sad~
代码如下:
再贴上两个代码,,留给自己参考……
#include <stdio.h> int main() { int i,n; int arr[100005]; int tag = 2, tmp = 0; for(i = 1; i <= 100000; i++){ if(tmp == tag){ arr[i] = tag; tmp = 0; tag++; } else{ arr[i] = 1; tmp ++; } } while(scanf("%d",&n) != EOF) { printf("%d\n", arr[n]); } return 0; }
#include <stdio.h> int arr[100005]; int main() { int n; while(scanf("%d", &n) != EOF) { int sum = 0; int tag = 2; while(1){ if(sum > n){ printf("1\n"); break; } if(sum == n){ printf("%d\n", tag - 1); break; } sum += tag + 1 ; tag++; } }return 0; }