一个C语言的小算法题(想了好久,没搞出来。。)

来源:互联网  责任编辑:小易  时间:2017/1/11 17:51:01
用户提出问题:一个C语言的小算法题(想了好久,没搞出来。。),具体如下: 算法 C语言 数据 字符串 新手

通过互联网整理获得以下解决方法:

=================1楼=====================

先写一个函数取得Smarandache consecutive number第n位的长度(可以建表再查)
然后对于输入src,取得它的长度m,比较它与第m位Smarandache consecutive number的大小
如果大于等于则结果为m,否则为m-1

=================2楼=====================

引用 1楼ID870177103 的回复:
先写一个函数取得Smarandache consecutive number第n位的长度(可以建表再查)
然后对于输入src,取得它的长度m,比较它与第m位Smarandache consecutive number的大小
如果大于等于则结果为m,否则为m-1
如何得到第m位的那个字符串?

=================3楼=====================

//把数字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;
}

=================4楼=====================

Talk is cheap, show me the code.

=================5楼=====================


#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;

=================6楼=====================

引用 5 楼 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不够大嘢。

=================7楼=====================

char c[1024]; 这个小了,第999个数有2889位。

=================8楼=====================

怎么又是同一道题,还是不同的人问的

=================9楼=====================

引用 6 楼 zhao4zhong1 的回复:
Quote: 引用 5 楼 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不够大嘢。

后来发现是str += c;跟1024不够大没关系。

=================10楼=====================

引用 8 楼 cutmelon 的回复:
怎么又是同一道题,还是不同的人问的

同班同学嘛。

如果您还有更好的解决方法,请在最下面评论中留下您的解决方法


  • 本文相关:
  • 站长必读,如何真正写好一篇原创文章
  • 互联网之路细嗅蔷薇 资深站长分享掘金之道
  • 企业站的站长的工作重心究竟有哪些
  • 浅析:行业门户网站的一些盈利模式
  • 3000IP的企业网站每天订单不到30个的苦恼
  • 网站想内外兼修?先学习提高网站可用性的6大原则
  • 浅谈网页设计中的简约之美
  • 网页改版实战:日本设计师如何彻底优化旅游网站?
  • 网页改版实战!日本设计师如何彻底优化招聘网站?
  • 2015年值得关注的21个网页设计趋势
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2015 www.zgxue.com All Rights Reserved