标题:关于程序运行超时的问题
只看楼主
Dyson_0
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-10-9
 问题点数:0 回复次数:4 
关于程序运行超时的问题
问题:有一个里程计数器,汽车每走一公里它计数一次,但是它每次都会跳过含有3和8的数字,例如29的下一个不是30,而是40.,15229的下一个不是15230而是15240。现在给出一个读数,问汽车实际走了多少公里?(输入0时则不输出答案。)
以下是我的代码,超时了,请问怎么进行优化?
#include<stdio.h>
int main()
{
    int reading = 0, t = 0;    /*t is used to store the value of i*/
    int flag = 1, actual_num = 0;

    while(1)
    {
        scanf("%d", &reading);
        if(reading == 0)
            break;
        actual_num = 0;
        for(int i = 1;i <= reading;i++)
        {
            t = i;
            while(i != 0)
            {
                if(i % 10 == 3 || i % 10 == 8 )  //determine whether there is 3 or 8 in the number
                {
                    flag = 0;
                    break;           
                }
                i = i/10;   
            }
            if(flag)
                actual_num++;
            i = t;
            flag = 1;
        }
        printf("%d: %d\n", reading, actual_num);
    }

    return 0;
}
搜索更多相关主题的帖子: reading include 计数器 store 汽车 
2016-10-21 09:37
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:0 
dev c++
编译运行通过,不过上面的代码并不能实现你的意图
if(i % 10 == 3 || i % 10 == 8 ) //求出个位数字没用吧

如果reading是两位数 那么30 80跳跃各一次
如果reading是三位数 跳跃次数乘以百位数字
如果reading是四位数 跳跃次数乘以(i/100)

具体代码我没写

早知做人那么辛苦!  当初不应该下凡
2016-10-21 10:42
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:0 
这是一个8进制转十进制的问题,应该很容易解决。
2016-10-21 10:47
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
代码少了判断reading,既然跳过3和8,那么这个reading也不能含有3和8。
如果输入的是15229,当运行到13000的时候,显然是可以直接跳到14000,而不是一点点的往上加。
最简单的算法就如楼上所说,用8进制来计算。先通过公里表上的8进制公里数得出正确的公里数。各个位数k只有三种情况,3<=k<8,k-1.   k<3 k.   k>=8,k-2.
例如:15229==14227.这个14227就是实际公里数的8进制数,将这个数转换成10进制数就是实际公里数6295


[此贴子已经被作者于2016-10-21 12:19编辑过]

2016-10-21 11:15
Dyson_0
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-10-9
得分:0 
回复 4楼 linlulu001
不好意思  刚刚看到您的回复。谢谢你的解答。
2016-10-27 23:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-470052-1-1.html




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

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