| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 950 人关注过本帖
标题:算法实现题1.1(探讨)
只看楼主 加入收藏
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:12 
算法实现题1.1(探讨)
程序代码:
算法实现题1-1
1.问题描述:一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的
        习惯编排,每个页码都不含多余的前导数字0.例如,第6页用数字6表示,而不是06或者006
        等.数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字
        012,....,92.算法设计:给定表示书的总页码的十进制整数n(1<=n<=10^9),计算书的全部页码中分别
            用到多少次数字0,1,2.....9.
3.数据输入:输入数据由文件名input.txt的文本文件提供.每个文件只有一行,给出表示书
            的总页码的整数n
4.结果输出:将计算结果输出到文件output.txt.输出文件共10行,在第k行输出页码中用到数字k-1
            的次数,k=1,2,....10.
            输入文件示例                     输出文件示例
            input.txt                           output.txt
            11                                  1
                                                4
                                                1
                                                1
                                                1
                                                1
                                                1
                                                1
                                                1
                                                1 


[ 本帖最后由 大蛇丸_ 于 2013-6-15 15:27 编辑 ]
搜索更多相关主题的帖子: 自然数 十进制 
2013-06-05 16:12
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:4 
我记得TonyDeng说过这个题,论坛有这个,txt直接读取就可以了,转换成字符串,
收到的鲜花
  • 大蛇丸_2013-06-05 16:57 送鲜花  1朵   附言:找不到...有链接?
  • 大蛇丸_2013-06-05 17:37 送鲜花  1朵   附言:???

Maybe
2013-06-05 16:51
q13678986740
Rank: 4
等 级:业余侠客
帖 子:114
专家分:245
注 册:2012-7-7
收藏
得分:4 
将页码全部写入文本,在扫描计数就行。
收到的鲜花
  • 大蛇丸_2013-06-05 20:19 送鲜花  1朵   附言:不明白你说的什么?麻烦贴出你的代码...!
2013-06-05 18:53
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
收藏
得分:0 
我说....仔细看我题目没有?

冷静....!
2013-06-05 21:05
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

int main() {
    int n, a[10], i, j, b, c;
    while(scanf("%d", &n) == 1) {
        memset(a, 0, sizeof(a));
        for(i = 1; i <= n; i++) {
            c = i;
            while(c) {
                b = c % 10; c /= 10;
                for(j = 0; j <= 9; j++)
                    if(b == j) {a[j]++; break;}
            }
        }
        for(i = 0; i <= 9; printf("%d\n", a[i++])) ;
    }
    return 0;
}



[ 本帖最后由 大蛇丸_ 于 2013-6-13 00:36 编辑 ]

冷静....!
2013-06-06 18:33
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:4 
程序代码:
#include<stdio.h>

int f(int n, int x)
{
        int count = 0;
        int factor = 1;
        int lower_num = 0;
        int cur_num = 0;
        int higher_num = 0;

        while ((x!=0&&n/factor!=0) || (x==0&&n/factor>=10))
        {
                lower_num = n - n/factor*factor;
                cur_num = n/factor%10;
                higher_num = n/factor/10;

                if (x==0)
                        higher_num--;
                if (cur_num < x)
                        count += higher_num*factor;
                if (cur_num == x)
                        count += higher_num*factor + lower_num + 1;
                if (cur_num > x)
                        count += (higher_num+1) * factor;
                
                factor *= 10;
        }
        return count;
}

int main(void)
{
        int n;
        int i;
        int result[10];
        for (i=0; i<10; i++)
                result[i] = 0;
        scanf("%d", &n);
        for (i=0; i<10; i++)
        {
                result[i] = f(n, i);
                printf("%d\n", result[i]);
        }

        return 0;
}
收到的鲜花
  • 大蛇丸_2013-06-06 19:04 送鲜花  1朵   附言:能说下你的思路?

自由、民主、宪政!
2013-06-06 18:47
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
收藏
得分:0 
效率都不怎么样...?

冷静....!
2013-06-13 12:31
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
int main() {
    int n, len, a[10], b[100], c[100], t, i, j, d[100], f, e;
    while(scanf("%d", &n) == 1) {
        len = 0; t = n;
        if(n == 0) a[0] = 0;
        memset(a, 0, sizeof(a));
        d[0] = 1;
        while(t) {len++; t /= 10;}
        for(i = 1; i <= len; i++) {
            d[i] = 1;
            for(j = 1; j <= i; j++) d[i] *= 10;
            b[i] = n / d[i];
            c[i] = n % d[i];
        }
        for(i = 1; i <= len; i++)
            for(j = 1; j <= 9; j++)
                a[j] += b[i] * d[i - 1] + (c[i] / d[i - 1] > j ? d[i - 1] : (c[i] / d[i - 1] == j ? (c[i] % d[i - 1] + 1) : 0));
        for(i = 1; i <= n; i++) {
            f = i;
            while(f) {
                e = f % 10; f /= 10;
                if(!e) a[0]++;
            }
        }
        for(i = 0; i <= 9; printf("%d\n", a[i++])) ;
    }
    return 0;
}
再一次升华!....呵呵

冷静....!
2013-06-14 00:23
大蛇丸_
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-6-3
收藏
得分:0 
上面的代码除了0解决得不满意其他已经满足了,0还是用的暴力解决的,但是效率确实提升了不少!

冷静....!
2013-06-14 00:27
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
收藏
得分:0 
留个脚印,明天来弄。手机党飘过!

一同学习, 一同进步
2013-06-14 01:28
快速回复:算法实现题1.1(探讨)
数据加载中...
 
   



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

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