鱼C论坛

 找回密码
 立即注册
查看: 2878|回复: 9

输出与七有关的数

[复制链接]
发表于 2015-11-29 12:52:52 | 显示全部楼层 |阅读模式
10鱼币
输入一个数N,输出不大于N的与七 有关的个数,如七的倍数,包含七数字的数
如 20 里有三个数,7,14,17.
#include <stdio.h>
int main()
{
    int i=0,n,j;
    scanf("%d",&n);
    for(j=7;j<=n;j++)
    {
            if(j/10==7 || j%10 == 7 || j%7 ==0)
              i++;
              
    }
    printf("%d\n",i);
    return 0;
}

我发现我的程序是有点问题的,并没有把所有的数都包含进去。如 170 这个数就不行。

最佳答案

查看完整内容

这个意思是,如果这个数的个位是7,就让i加1,这里的*p就是i。 void seven(int *p, int j)//判断一个数中是否有某一位是数字7 { if (j % 10 == 7)//如果最后一位数字是7 (*p)++;//i加1 else if (j / 10 != 0)//如果最后一位数字不是7,就去掉最后一位数字,形成这个新的数,进入迭代计算 seven(p, j / 10); } 这个函数执行的效果就是,从这个数的最后一位开始遍历,遇到是7的位,就让i加1,并且函数执行结束;如果 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 12:52:53 | 显示全部楼层
独一无② 发表于 2015-11-29 15:01
if (j % 10 == 7)
                (*p)++;

这个意思是,如果这个数的个位是7,就让i加1,这里的*p就是i。
void seven(int *p, int j)//判断一个数中是否有某一位是数字7
{
        if (j % 10 == 7)//如果最后一位数字是7
                (*p)++;//i加1
        else if (j / 10 != 0)//如果最后一位数字不是7,就去掉最后一位数字,形成这个新的数,进入迭代计算
                seven(p, j / 10);
}
这个函数执行的效果就是,从这个数的最后一位开始遍历,遇到是7的位,就让i加1,并且函数执行结束;如果一直没有是7的位,就执行到最后,i没有变化,函数执行结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 13:39:40 | 显示全部楼层
这一句是有问题的“if(j/10==7 || j%10 == 7 || j%7 ==0)”。也不是有问题就是逻辑上不对,170不满足所有的条件所以就没有咯。
只要把j/10改成j%10==0就可以了,记得采纳哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-29 14:21:11 | 显示全部楼层
老师 发表于 2015-11-29 13:39
这一句是有问题的“if(j/10==7 || j%10 == 7 || j%7 ==0)”。也不是有问题就是逻辑上不对,170不满足所有的 ...

j%10==0   那不是 180,190也符合了,但是事实上不行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 14:40:41 | 显示全部楼层
if判断的逻辑有漏洞,判断小于170的数是不会发现问题的,大于等于170之后就不准确了。
这是我改的代码:
#include<stdio.h>
void seven(int *p, int j)
{
        if (j % 10 == 7)
                (*p)++;
        else if (j / 10 != 0)
                seven(p, j / 10);
}
int main()
{
        int i = 0, j, n;
        int *p = &i;
        scanf("%d", &n);
        for (j = 7; j <= n; j++)
        {
                if (j % 7 == 0)
                        i++;
                else
                        seven(p, j);
        }
        printf("%d\n", i);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-29 15:01:47 | 显示全部楼层
0xcc 发表于 2015-11-29 14:40
if判断的逻辑有漏洞,判断小于170的数是不会发现问题的,大于等于170之后就不准确了。
这是我改的代码:
...

if (j % 10 == 7)
                (*p)++;

这一步是什么意思? 看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 15:25:08 | 显示全部楼层
本帖最后由 ravenhu13 于 2015-11-29 15:30 编辑

捕获.JPG
#include <stdio.h>
int main()
{
        int i=0,n,j;
        int k;
        scanf("%d",&n);

        for(j=7;j<=n;j++)
        {
                //7的倍数打印出来
                if ((j/7)&&(j%7==0))
                {
                        printf("%d\n",j);
                }else 
                {
                //包含7的数字
                        k = j;
                        for (i=10;k/i>0;i*=10)
                        {                                
                                if (((k/i)%i)==7)
                                {
                                        printf("%d\n",k);
                                }                                
                        }
                }
        }
        return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
独一无② + 5 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 15:26:50 | 显示全部楼层
这里我是输出所有有关7的数字,个数的你改改就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-29 16:07:42 | 显示全部楼层
0xcc 发表于 2015-11-29 15:28
这个意思是,如果这个数的个位是7,就让i加1,这里的*p就是i。
void seven(int *p, int j)//判断一个数 ...

哦哦,现在懂了。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-1 15:51:17 | 显示全部楼层
还没懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 22:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表