好久没刷题了(阿里测试题)
发布日期:2021-06-29 11:11:53 浏览次数:4 分类:技术文章

本文共 2305 字,大约阅读时间需要 7 分钟。

这里写图片描述

我大哥给我做的,今天终于有时间做了,因为没有测试数据所以就不知道是否正确,所以希望各位路过大神指教
思路
这里写图片描述
类似杨辉三角形,因此竖着列出来,然后打表把各种值求出最后找就可以了。

打表代码#include
/*输出的i为每块最后一行的标号的个数(没错) sum为这个块字幕的个数。 */ int main(){ int i, sum = 0,n=1; for(i = 1; n<=9; i++){ sum += i; n++; }//i=10 printf("i = %d sum = %d\n", i-1 ,sum); for(i = i+1; n <= 99; ){ sum += i; i+=2; n++; } // printf("i = %d sum = %d\n", i-2 ,sum); for(i = i+1; n <= 999; ){ sum += i; i+=3; n++; } printf("i = %d sum = %d\n", i-3 ,sum); for(i = i+1; n <= 9999; ){ sum += i; i+=4; n++; } printf("i = %d sum = %d\n", i-4 ,sum); return 0;}
#include
int dukuai(int k);//判断这个标号位于哪个大块中 int dubiaohao(int kuai, int k);int main(){ int k,m,kuai; while(scanf("%d",&k)!=NULL){ kuai = dukuai(k); printf("%d\n",kuai); m = dubiaohao(kuai,k); printf("%d\n",m); } return 0;}/*i表示这行的总标号数sum表示从第一行开始到该行最后一个标号的总标号数 sum-i-2表示第一行开始到上一行最后一个标号的总标号数 */int dubiaohao(int kuai, int k){ int sum,i,biaohao; if(kuai == 1){ sum = 0; for(i = 1; ; i++){
//从第一行遍历起,当小于该行最后一个数的标号时则表示位于该行。 sum += i; if(k<=sum){ biaohao = k-(sum-i); break; } } }else if(kuai == 2){ sum = 45; //第9行有9个标号 for(i = 11; ; i+=2){
//从第10行遍历起,当小于该行最后一个数的标号时则表示位于该行。 sum += i; if(k<=sum){ biaohao = k-(sum-i); break; } } }else if(kuai == 3){ sum = 9045; //第99行有190个标号 for(i = 192; ; i+=3){
//从第100行遍历起,当小于该行最后一个数的标号时则表示位于该行。 sum += i; if(k<=sum){ biaohao = k-(sum-i); break; } } }else if(kuai == 4){ sum = 1395495; //第999行有2892个标号 for(i = 2893; ; i+=4){
//从第1000行遍历起,当小于该行最后一个数的标号时则表示位于该行。 sum += i; if(k<=sum){ biaohao = k-(sum-i); break; } } } return biaohao; }int dukuai(int k){ if(k<=45){
//1到9 k = 1; }else if(k<=9045){
//10到99 k = 2; }else if(k<=1395495){
//100到999 k = 3; }else {
//1000到9999 k = 4; } return k;}

转载地址:https://blog.csdn.net/zw1996/article/details/78012988 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SurfaceView的系列用法(未完)
下一篇:刷门禁——判断卡号是否一样(String==String)出现False

发表评论

最新留言

很好
[***.229.124.182]2024年04月10日 04时24分40秒