| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1366 人关注过本帖
标题:一个考试的题目。。考完了还是没做出来,求各位大神帮帮忙。 谢谢了
只看楼主 加入收藏
lo4er
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2014-11-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:16 
一个考试的题目。。考完了还是没做出来,求各位大神帮帮忙。 谢谢了
假设一个数n能被7整除,或者这个数的个位数是7(例如27),再或者这个数的每位数的和是7的倍数(例如68,6+8=14为7的倍数),我们称这样的数为魔七数,给你两个整数n,m,输出在n和m之间(包括n,m)所有的魔七数。
 Input

有多行测试数据,每行包含两个数n,m(0<=n<=100000,0<=m<=100000)。
 Output

从小到大依次输出该范围内所有魔七数,每个魔七数后均有空格。每组输出结果占一行。(不存在魔七数为输出空行)
 Sample Input

1 27
12 15
 Sample Output

7 14 16 17 21 25 27
14

下面是我的代码。。。求教啊   输出的一样啊 不知道哪里错了  
#include<stdio.h>
main()


{
    int m,n,s;
    while(scanf("%d%d",&m,&n)!=EOF)
   
    {  s=0;
        for(;m<=n;m++)
        {
            if(m%7==0||m%10==7)
            {
            printf("%d ",m);
            s=1;
            }
            
            else if( ( (m/100000)%10 +  (m/10000)%10 + (m/1000)%10 + (m/100)%10 + (m/10)%10 + m%10 )%7==0)
            {    s=1;
            printf("%d ",m);
            }

   
        }
        
            printf("\n");
    }
   
}

[ 本帖最后由 lo4er 于 2014-12-9 21:27 编辑 ]
2014-12-09 21:23
xp0213
Rank: 7Rank: 7Rank: 7
来 自:湖北武汉
等 级:黑侠
威 望:1
帖 子:222
专家分:524
注 册:2011-10-26
收藏
得分:4 
else if( ( (m/100000)%10 +  (m/10000)%10 + (m/1000)%10 + (m/100)%10 + (m/10)%10 + m%10 )%7==0)

我想知道你为什么写这样的一行代码呢?

对一个整数各位数字求和,假设我们不知道这个数值的范围(实际上当然是有范围的),这样的一个程序你会写吗
2014-12-09 21:35
xp0213
Rank: 7Rank: 7Rank: 7
来 自:湖北武汉
等 级:黑侠
威 望:1
帖 子:222
专家分:524
注 册:2011-10-26
收藏
得分:0 
具体的我没有细看,你再仔细想想
2014-12-09 21:36
lo4er
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2014-11-17
收藏
得分:0 
回复 2楼 xp0213
其实我不会写啊 ,所以才用这个方法的。。。。
2014-12-09 21:46
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:4 
有个较复杂的做法,就是找出100000以内所有的魔七数,把它们存入数组,然后直接查找n和m间的魔七数

一片落叶掉进了回忆的流年。
2014-12-09 22:37
sunngyy
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2014-11-22
收藏
得分:4 
else if( ( (m/100000)%10 +  (m/10000)%10 + (m/1000)%10 + (m/100)%10 + (m/10)%10 + m%10 )%7==0)
这一句判断语句写错了,求最高位不用再求余了,应该改为:
else if( ( (m/100000)+  (m/10000)%10 + (m/1000)%10 + (m/100)%10 + (m/10)%10 + m%10 )%7==0)
另外,那条scanf语句应该不能那么写,直接改为while(m!='\0’&&n!='\0')
其实,'\0'跟EOF是一样的,但是EOF在有的编译器确实不能识别的,所以,最好改为'\0'

[ 本帖最后由 sunngyy 于 2014-12-10 09:39 编辑 ]
2014-12-10 08:43
lo4er
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2014-11-17
收藏
得分:0 
谢谢大家,问老师说这题有个点就是给的两个数mn谁大谁小不一定,所以要先判断,才能从小到大排序。。。。诶
2014-12-10 16:38
梦々魇
Rank: 1
等 级:新手上路
帖 子:9
专家分:8
注 册:2014-12-3
收藏
得分:4 
以下是引用诸葛欧阳在2014-12-9 22:37:02的发言:

有个较复杂的做法,就是找出100000以内所有的魔七数,把它们存入数组,然后直接查找n和m间的魔七数

额。。貌似您没看清楚题目诶
2014-12-11 10:37
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
给你一个函数itoa(int value,char*string,int radix)第一个参数是待转换的数,第三个参数是限定在二进制到三十六进制之间的数,该函数将value转换为radix进制,并把每位存入string,不够的补\0,例如char buf[5];itoa(1089,buf,10);它将1089转换为十进制并将每位数存入buf,buf[0]=1,buf[1]=0,buf[2]=8,buf[3]=9,buf[4]=\0,该函数在#include<stdlib.h>中

一片落叶掉进了回忆的流年。
2014-12-11 11:05
comewest
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:74
专家分:335
注 册:2014-12-3
收藏
得分:4 
#include<stdio.h>
int main()
{
    int m,n,s,temp;
    scanf("%d%d",&m,&n);
    if(m>n)        //大小判断
    {
        temp=m;
        m=n;
        n=temp;
    }
     for(;m<=n;m++)// 给出m~n区间的数
        {   temp=m;
            s=0;
            do{   
               s+=temp%10;
               temp=temp/10;
            }while(temp);
            if(m%7==0||m%10==7 || s%7==0)  //魔七数判断
                printf("%d ",m);  
        }   
  return 0;  
}
2014-12-11 16:26
快速回复:一个考试的题目。。考完了还是没做出来,求各位大神帮帮忙。 谢谢了
数据加载中...
 
   



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

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