user-0 提问: 遇到一个问题 想了好久也没想到思路

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复://把数字1到n连接起来就构成了第n个Smarandache consecutive number。Smarandache的前17个数如下： //1 //12 //123 //1234 //12345 //123456 //1234567 //12345678 //123456789 //12345678910 //1234567891011 //123456789101112 //12345678910111213 //1234567891011121314 //123456789101112131415 //12345678910111213141516 //1234567891011121314151617 //给定一个正整数n，问[1,n]之间含有多少个Smarandache consecutive number？ //输入 //多行数据组成。 //每行一个整数n，n大于1并且小于第1000个Smarandache consecutive number。 //输出 //对于每一行的数据n，输出一行，即[1,n]之间Smarandache consecutive number的个数。 // //样例输入 //1 //13 //1233 //样例输出 //1 //2 //3 #include <stdio.h> #include <string.h> char S[1000][4000]; int i,j,L,n; char ln[4000]; int main() {     for (i=0;i<1000;i++) {         L=0;         for (j=1;j<=i+1;j++) {             L+=sprintf(S[i]+L,"%d",j);         } //      printf("%4d %s\n",i+1,S[i]);     }     while (1) {         if (NULL==fgets(ln,4000,stdin)) break;         if ('\n'==ln[0]) break;         if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         n=0;         for (i=999;i>=0;i--) {             if (strlen(ln)>=strlen(S[i])) {                 if (strcmp(ln,S[i])>=0) n++;                 n+=i;                 break;             }         }         printf("%d\n",n);     }     return 0; }    非常感谢！！还给我直接打出来了！ 我好好想一下  再加上百度理解  应该没问题的。

user: user-1
content: //把数字1到n连接起来就构成了第n个Smarandache consecutive number。Smarandache的前17个数如下： //1 //12 //123 //1234 //12345 //123456 //1234567 //12345678 //123456789 //12345678910 //1234567891011 //123456789101112 //12345678910111213 //1234567891011121314 //123456789101112131415 //12345678910111213141516 //1234567891011121314151617 //给定一个正整数n，问[1,n]之间含有多少个Smarandache consecutive number？ //输入 //多行数据组成。 //每行一个整数n，n大于1并且小于第1000个Smarandache consecutive number。 //输出 //对于每一行的数据n，输出一行，即[1,n]之间Smarandache consecutive number的个数。 // //样例输入 //1 //13 //1233 //样例输出 //1 //2 //3 #include <stdio.h> #include <string.h> char S[1000][4000]; int i,j,L,n; char ln[4000]; int main() {     for (i=0;i<1000;i++) {         L=0;         for (j=1;j<=i+1;j++) {             L+=sprintf(S[i]+L,"%d",j);         } //      printf("%4d %s\n",i+1,S[i]);     }     while (1) {         if (NULL==fgets(ln,4000,stdin)) break;         if ('\n'==ln[0]) break;         if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         n=0;         for (i=999;i>=0;i--) {             if (strlen(ln)>=strlen(S[i])) {                 if (strcmp(ln,S[i])>=0) n++;                 n+=i;                 break;             }         }         printf("%d\n",n);     }     return 0; }

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:使用char []和sprintf 不好意思哈  初学  你说的我百度了一下   但是还是没有想到怎么解决这个根本问题的核心算法   就是计算返回的数的值 可以稍微解释一下么？

user: user-1
content: 使用char []和sprintf

user: user-0
content: 我本来想用判断数字位数来计算的，但是想了下可行性太小了，，，需要计算的东西太多了

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:[quote=引用 6 楼 NDFour 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] //把数字1到n连接起来就构成了第n个Smarandache consecutive number。Smarandache的前17个数如下： //1 //12 //123 //1234 //12345 //123456 //1234567 //12345678 //123456789 //12345678910 //1234567891011 //123456789101112 //12345678910111213 //1234567891011121314 //123456789101112131415 //12345678910111213141516 //1234567891011121314151617 //给定一个正整数n，问[1,n]之间含有多少个Smarandache consecutive number？ //输入 //多行数据组成。 //每行一个整数n，n大于1并且小于第1000个Smarandache consecutive number。 //输出 //对于每一行的数据n，输出一行，即[1,n]之间Smarandache consecutive number的个数。 // //样例输入 //1 //13 //1233 //样例输出 //1 //2 //3 #include <stdio.h> #include <string.h> char S[1000][4000]; int i,j,L,n; char ln[4000]; int main() {     for (i=0;i<1000;i++) {         L=0;         for (j=1;j<=i+1;j++) {             L+=sprintf(S[i]+L,"%d",j);         } //      printf("%4d %s\n",i+1,S[i]);     }     while (1) {         if (NULL==fgets(ln,4000,stdin)) break;         if ('\n'==ln[0]) break;         if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         n=0;         for (i=999;i>=0;i--) {             if (strlen(ln)>=strlen(S[i])) {                 if (strcmp(ln,S[i])>=0) n++;                 n+=i;                 break;             }         }         printf("%d\n",n);     }     return 0; }   不得不说， 在这里面提问 ，一段时间后，，我觉得我应该会进步飞快，，，，毕竟好多大牛回复我的我都看不懂  然后就自己去百度，，，实验，真是个好地方！！！[/quote] 你为什么不说“毕竟zhao4zhong1大牛回复我的我都看不懂”呢？[/quote]  更重要的是  我之前看过一句话：“在你觉得难得时候，其实你是在进步！“

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:[quote=引用 6 楼 NDFour 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] //把数字1到n连接起来就构成了第n个Smarandache consecutive number。Smarandache的前17个数如下： //1 //12 //123 //1234 //12345 //123456 //1234567 //12345678 //123456789 //12345678910 //1234567891011 //123456789101112 //12345678910111213 //1234567891011121314 //123456789101112131415 //12345678910111213141516 //1234567891011121314151617 //给定一个正整数n，问[1,n]之间含有多少个Smarandache consecutive number？ //输入 //多行数据组成。 //每行一个整数n，n大于1并且小于第1000个Smarandache consecutive number。 //输出 //对于每一行的数据n，输出一行，即[1,n]之间Smarandache consecutive number的个数。 // //样例输入 //1 //13 //1233 //样例输出 //1 //2 //3 #include <stdio.h> #include <string.h> char S[1000][4000]; int i,j,L,n; char ln[4000]; int main() {     for (i=0;i<1000;i++) {         L=0;         for (j=1;j<=i+1;j++) {             L+=sprintf(S[i]+L,"%d",j);         } //      printf("%4d %s\n",i+1,S[i]);     }     while (1) {         if (NULL==fgets(ln,4000,stdin)) break;         if ('\n'==ln[0]) break;         if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         n=0;         for (i=999;i>=0;i--) {             if (strlen(ln)>=strlen(S[i])) {                 if (strcmp(ln,S[i])>=0) n++;                 n+=i;                 break;             }         }         printf("%d\n",n);     }     return 0; }   不得不说， 在这里面提问 ，一段时间后，，我觉得我应该会进步飞快，，，，毕竟好多大牛回复我的我都看不懂  然后就自己去百度，，，实验，真是个好地方！！！[/quote] 你为什么不说“毕竟zhao4zhong1大牛回复我的我都看不懂”呢？[/quote]  你回复的我确实有好多都看不懂，，，，但是靠着百度 还是可以慢慢理解的

user: user-0
content: 引用 7 楼 yangyangsnr 的回复: #include <iostream> #include <string> using namespace std; int main() {     int n = 1;     string str;     string input;     cin>>input;     while( 1 )     {         char c[1024];         sprintf( c, "%d", n );         str += c;         if( str.size() >= input.size() ) break;         n++;     }     if( str.size() > input.size() || (str.size() == input.size() && str > input ) ) n--;     cout<<str.size()<<endl;     cout<<str<<endl;     cout<<"Total number is:"<<n<<endl;     getchar();     getchar();     return 0; }    谢谢回复   我会认真看一下的

user: user-2
content: 赵老师先建表的思路挺好的，不过为啥不在建表同时把长度也算好存起来，这样拿到输入的时候就不用再循环比较字符串了啊

user: user-3
content: 引用 7 楼 yangyangsnr 的回复: #include <iostream> #include <string> using namespace std; int main() {     int n = 1;     string str;     string input;     cin>>input;     while( 1 )     {         char c[1024];         sprintf( c, "%d", n );         str += c;         if( str.size() >= input.size() ) break;         n++;     }     if( str.size() > input.size() || (str.size() == input.size() && str > input ) ) n--;     cout<<str.size()<<endl;     cout<<str<<endl;     cout<<"Total number is:"<<n<<endl;     getchar();     getchar();     return 0; }   理解错了，题目说第1000位，理解成了这个数最大1000位了......

user: user-1
content: 引用 6 楼 NDFour 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] //把数字1到n连接起来就构成了第n个Smarandache consecutive number。Smarandache的前17个数如下： //1 //12 //123 //1234 //12345 //123456 //1234567 //12345678 //123456789 //12345678910 //1234567891011 //123456789101112 //12345678910111213 //1234567891011121314 //123456789101112131415 //12345678910111213141516 //1234567891011121314151617 //给定一个正整数n，问[1,n]之间含有多少个Smarandache consecutive number？ //输入 //多行数据组成。 //每行一个整数n，n大于1并且小于第1000个Smarandache consecutive number。 //输出 //对于每一行的数据n，输出一行，即[1,n]之间Smarandache consecutive number的个数。 // //样例输入 //1 //13 //1233 //样例输出 //1 //2 //3 #include <stdio.h> #include <string.h> char S[1000][4000]; int i,j,L,n; char ln[4000]; int main() {     for (i=0;i<1000;i++) {         L=0;         for (j=1;j<=i+1;j++) {             L+=sprintf(S[i]+L,"%d",j);         } //      printf("%4d %s\n",i+1,S[i]);     }     while (1) {         if (NULL==fgets(ln,4000,stdin)) break;         if ('\n'==ln[0]) break;         if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         n=0;         for (i=999;i>=0;i--) {             if (strlen(ln)>=strlen(S[i])) {                 if (strcmp(ln,S[i])>=0) n++;                 n+=i;                 break;             }         }         printf("%d\n",n);     }     return 0; }   不得不说， 在这里面提问 ，一段时间后，，我觉得我应该会进步飞快，，，，毕竟好多大牛回复我的我都看不懂  然后就自己去百度，，，实验，真是个好地方！！！[/quote] 你为什么不说“毕竟zhao4zhong1大牛回复我的我都看不懂”呢？

user: user-1
content: 引用 7 楼 yangyangsnr 的回复: #include <iostream> #include <string> using namespace std; int main() {     int n = 1;     string str;     string input;     cin>>input;     while( 1 )     {         char c[1024];         sprintf( c, "%d", n );         str += c;         if( str.size() >= input.size() ) break;         n++;     }     if( str.size() > input.size() || (str.size() == input.size() && str > input ) ) n--;     cout<<str.size()<<endl;     cout<<str<<endl;     cout<<"Total number is:"<<n<<endl;     getchar();     getchar();     return 0; }   伙计，1024不够大嘢。

user: user-3
content: #include <iostream> #include <string> using namespace std; int main() {     int n = 1;     string str;     string input;     cin>>input;     while( 1 )     {         char c[1024];         sprintf( c, "%d", n );         str += c;         if( str.size() >= input.size() ) break;         n++;     }     if( str.size() > input.size() || (str.size() == input.size() && str > input ) ) n--;     cout<<str.size()<<endl;     cout<<str<<endl;     cout<<"Total number is:"<<n<<endl;     getchar();     getchar();     return 0; }

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复://把数字1到n连接起来就构成了第n个Smarandache consecutive number。Smarandache的前17个数如下： //1 //12 //123 //1234 //12345 //123456 //1234567 //12345678 //123456789 //12345678910 //1234567891011 //123456789101112 //12345678910111213 //1234567891011121314 //123456789101112131415 //12345678910111213141516 //1234567891011121314151617 //给定一个正整数n，问[1,n]之间含有多少个Smarandache consecutive number？ //输入 //多行数据组成。 //每行一个整数n，n大于1并且小于第1000个Smarandache consecutive number。 //输出 //对于每一行的数据n，输出一行，即[1,n]之间Smarandache consecutive number的个数。 // //样例输入 //1 //13 //1233 //样例输出 //1 //2 //3 #include <stdio.h> #include <string.h> char S[1000][4000]; int i,j,L,n; char ln[4000]; int main() {     for (i=0;i<1000;i++) {         L=0;         for (j=1;j<=i+1;j++) {             L+=sprintf(S[i]+L,"%d",j);         } //      printf("%4d %s\n",i+1,S[i]);     }     while (1) {         if (NULL==fgets(ln,4000,stdin)) break;         if ('\n'==ln[0]) break;         if ('\n'==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;         n=0;         for (i=999;i>=0;i--) {             if (strlen(ln)>=strlen(S[i])) {                 if (strcmp(ln,S[i])>=0) n++;                 n+=i;                 break;             }         }         printf("%d\n",n);     }     return 0; }   不得不说， 在这里面提问 ，一段时间后，，我觉得我应该会进步飞快，，，，毕竟好多大牛回复我的我都看不懂  然后就自己去百度，，，实验，真是个好地方！！！