| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5753 人关注过本帖, 1 人收藏
标题:统计1到N之间数字1的个数
只看楼主 加入收藏
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:25 
统计1到N之间数字1的个数
描述
N为正整数,计算从1到N的所有整数中包含数字1的个数。比如,N=10,从1,2...10,包含有2个数字1。
输入
输入数据有多组测试数据,每一组占一行,每行为一个数字N,其中1≤N≤9999。以0作为结束。
输出
输出1到N所有整数中1的个数,每个测试占一行。
样例输入
1
2
3
4
5
6
7
8
9
0
样例输出
1
1
1
1
1
1
1
1
1
程序代码:
#include"stdio.h"
int main()
{
    int x[9999],i,j,d,N;
    for(i=0,d=0;i<9999;i++)
    {
        for(j=1;i/j;j*=10)
        {
            if(i/j%10==1)
            {x[d]=i;
            //printf("%d d=%d ",x[d],d);
            d++;
            break;}
        }
    }
    while(scanf("%d",&N),N)
    {
        for(i=0;i<9999;i++)
        {
            if(N>=9991){printf("3439\n");break;}
            if(x[i]<=N&&x[i+1]>N)
            {printf("%d\n",i+1);break;}
        }
    }
    return 0;
}

刚开始我发现前面没有错,只是在输入9999的时候发现,在结束的地方没有去进行判断,我加了一个末尾的判断,但还是错,求解释
搜索更多相关主题的帖子: 测试 正整数 
2013-02-19 13:08
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
收藏
得分:0 
没人回答问题吗?
版主勿删
2013-02-19 19:11
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
收藏
得分:0 
每日一顶
,求人解答
2013-02-20 12:17
a151141
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:197
专家分:680
注 册:2012-10-19
收藏
得分:0 
我试了试,没发现错啊
实验结果如下:
1
1
10
2
9999
3439
0
press any key.......

世界上幸福的事就是抓到一只羊,更幸福的事就是抓到两只羊……
2013-02-20 12:27
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
收藏
得分:0 
我试也没错...就是过不了
就是这样才来找人帮忙的
这是台州ACM  1163的题目
http://acm.tzc.
2013-02-20 12:57
Merry_sf
Rank: 2
等 级:论坛游民
帖 子:30
专家分:24
注 册:2012-12-9
收藏
得分:0 
= =  是不是没有符合题目的 输入 输出的要求啊    输入数据是多组的 以0作为结束的
2013-02-20 13:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
我也写了一个,同样是 Wrong Answer
程序代码:
#include <stdio.h>

// 最直观的方法,分别计算每个数字中的1的个数,但这样效率不高
//int foo( int n )
//{
//    int r = 0;
//    for( ; n; n/=10 )
//        r += (n%10==1);
//    return r;
//}
//int bar( int n )
//{
//    int r = 0;
//    int i;
//    for( i=1; i<=n; ++i )
//        r += foo(i);
//    return r;
//}

// 递归方法
int recursion( int n )
{
    int base = 1;
    if( n < 10 )
        return 1;
    for( ; n>=base*10; base*=10 );

    return n/base*recursion(base-1) + ( n/base==1 ? n%base+1 : base ) + recursion(n%base);
}

// 优化后的递归方法
//int recursion( int n )
//{
//    if( n < 10 )
//        return 1;
//    if( n == 99 )
//        return 20;
//    if( n == 999 )
//        return 300;
//    if( n == 9999 )
//        return 4000;
//    if( n < 100 )
//        return n/10*recursion(9) + ( n/10==1 ? n%10+1 : 10 ) + recursion(n%10);
//    if( n < 1000 )
//        return n/100*recursion(99) + ( n/100==1 ? n%100+1 : 100 ) + recursion(n%100);
//    if( n < 10000 )
//        return n/1000*recursion(999) + ( n/1000==1 ? n%1000+1 : 1000 ) + recursion(n%1000);
//    return 0;
//}

int main()
{
    // 自己对比测试
    //for( int i=1; i<=9999; ++i )
    //{
    //    if( bar(i) != recursion(i) )
    //        printf( "%d\n", i );
    //    return 0;
    //}

    int n;
    for( ; scanf("%d",&n)==1 && n!=0; )
        printf( "%d\n", recursion(n) );

    return 0;
}

2013-02-20 14:26
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
程序代码:
#include <iostream>
using namespace std;

int f[9999];

int main()
{
    f[0]=1;
    for (int i=1; i<9999; i++)
    {
        f[i]=f[i-1];
        int j=i+1;
        while (j)
        {
              if (j%10==1) f[i]++;
              j/=10;
        }
    }
    
    int n;
    while (cin>>n,n!=0) cout<<f[n-1]<<endl;
}
2013-02-20 15:16
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
收藏
得分:0 
回复 6楼 Merry_sf
你要看懂这一条代码
while(scanf("%d",&N),N)

这上面的代码的有逗号运算的规则
你输入0,他就会退出的
2013-02-20 18:00
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
收藏
得分:0 
回复 7楼 rjsp
这个...
你计算的是1-N数字中1的个数,
题目是写的是
含有1的整数的个数
就是说
我是输入11的话
给出的应该是3
你思路的话是4
2013-02-20 18:11
快速回复:统计1到N之间数字1的个数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025887 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved