| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5753 人关注过本帖, 1 人收藏
标题:统计1到N之间数字1的个数
取消只看楼主 加入收藏
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:6 
统计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
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
收藏
得分:0 
我试也没错...就是过不了
就是这样才来找人帮忙的
这是台州ACM  1163的题目
http://acm.tzc.
2013-02-20 12:57
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
Magic_July
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:109
注 册:2012-9-25
收藏
得分:0 
程序代码:
#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;
            if(x[d]==x[d-1])
            x[d-1]==-1;
            //printf("%d d=%d ",x[d],d);
            d++;
            }
        }
    }
    while(scanf("%d",&N),N)
    {
        for(i=0;i<9999;i++)
        {
            if(N>=9991){printf("4000\n");break;}
            if(x[i]<=N&&x[i+1]>N)
            {
                if(x[i]==-1)
                continue;
                else
                printf("%d\n",i+1);break;}
        }
    }
    return 0;
}

自己AC后的代码
是我理解错了
我太年轻了
2013-02-21 12:22
快速回复:统计1到N之间数字1的个数
数据加载中...
 
   



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

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