OJ : 1082 :敲7(多实例测试)

本文介绍了一道编程题目的解决方案,要求输出不大于给定整数N的所有与7有关的数字,包括7的倍数和含有数字7的数。作者提供了详细的逻辑分析和C语言代码实现过程。
摘要由CSDN通过智能技术生成
题目描述

输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)

输入

首先输入一个整数t,表示有t组数据。 
然后有t行,每行一个整数N。(N不大于30000) 

输出

对于每组数据 ,输出从小到大排列的不大于N的与7有关的数字。每组数据占一行,每个数字后面有一个空格;

样例输入 
2
20
30
样例输出 
7 14 17 
7 14 17 21 27 28 

思路:

        这个题目要求的就是逢7的倍数或着含7这个数字的就过,那我们就可以通过循环,从1循环到N,判断一下循环的数字中有多少个满足要求的数字并输出。我么接下来进行分析如何判断是否满足这两个要求。对于第一个要求,是7的倍数,我们可以直接用这个数对7取余,如果余数是0,那么这个数就是7的倍数。对于第二个要求,数字中含有7,我们可以依次取余进行判断,也就是判断最后一位是不是7,如果不是,就缩小10倍,继续进行判断,直到这个数小于0或者余数里有7结束这次判断。可以结合代码看一下,会更好理解。

代码:

#include<stdio.h>

int main() {
    int t;
    scanf("%d", &t); // 输入有几组数据

    for (int i = 0; i < t; i++) // 有几组数据循环几次
    {
        int N;
        scanf("%d", &N);
        for (int j = 1; j <= N; j++) // 从1循环到N
        {
            if (j % 7 == 0) // 7的倍数
            {
                printf("%d ", j);
            }
            else // 不是7的倍数
            {
                int b = j;
                while (b > 0)
                {
                    int a = b % 10; //判断最后一位数字是否是7
                    if (a == 7) // 最后一位数字是7,也就是这个数虽然不是7的倍数,但是其中某一位含有7
                    {
                        printf("%d ", j); // 输出这个数
                        break; // 跳出这个循环
                    }
                    b /= 10; // 如果当前这个数的末位不是7,则除以10,继续判断最后一位是不是7,直到这个数小于0
                }
            }
        }
        printf("\n");
    }

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值