回复:(args)怎样计数?
以下是引用args在2006-6-17 1:10:45的发言:
输入两个数a和b,然后计算出中间除了尾数是4或7之外有多少个数
例如输入a=1和b=20,其中有4个尾数是4或者7的数,所以中间总共有16个数
算法分析:
1。不难看出,连头带尾在内每10个数中总有1个尾部为4的、1个尾部为7的,所以有8个符合要求。因此至少有(b-a+1)/10*8个符合条件的数。
2。零头处理:等价于从 a%10 到 b%10 里面含几个合乎要求的数。
3。代码:
#include<stdio.h>
main( )
{
int a,b,n;
scanf("%d %d",&a,&b);
n = (b-a+1)/10*8;
//楼主自行尝试填充此处,好吗?
printf("There are %d numbers OK.\n",n);
}
----------------解决方案--------------------------------------------------------
楼上的,好象不是 这么简单吧,还有 判断输入的 那 两个 数是否尾数为 四或七 ,
那条式碰到 特殊情况是行不通的^^^^
----------------解决方案--------------------------------------------------------
因为输入的两个数不会是一到十这样,或者是三到八,四到七。。。
----------------解决方案--------------------------------------------------------
偶是遵照您在2楼
越简单越好的指示执行的呀!
----------------解决方案--------------------------------------------------------
简单是建立在处理好特殊情况的基础上吧……
是这样的,客户公司的卡都是有号码的,
而号码要跳开末位是4或7的数不要,而且要算出卡的数量
所以才了这个疑问,我一开始也想象和楼上一样,
可是后来发现,输入的开始号和结束号不一定是从0到9,会可以是特殊情况
例如一开始就输入个 823557 和 823564,那就必须先跳过,
然后中间有多少个数,按楼上的式子,开始号823556和823558得出的结果是不同的,
因为每十个里面有八个是建立在从3开始的以8结尾的基础上,但如果输入的在3和8之间,那就是特殊情况
式子不合用……
----------------解决方案--------------------------------------------------------
所以应分为四种情况,开始号和结束号分别在3和8之间还是在3和8之外的情况
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽