【中学】寻找特殊偶数

背景

有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。

输入

所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。

输出

列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 3000  3020↵
  2. 6040  6090↵
  3. 0 0↵
以文本方式显示
  1. 3012  3014  3016  3018  ↵
  2. counter=4↵
  3. 6042  6048  6052  6054  6058  6072  6074  6078  6082  6084  ↵
  4. counter=10↵
1秒64M0
测试用例 2以文本方式显示
  1. 9  101↵
  2. 87 -1↵
  3. 0 0↵
以文本方式显示
  1. Error↵
  2. Error↵
1秒64M0

思路:

    本题的难点在于多次(循环)输入完成后,一次性输入结果。这种循环输入其实很符合数组的输入方式,我们不妨建立一个二维数组来储存每次输入的两个数字。

    写了循环,我们就要明确循环如何终止。我这里选择用for循环+flag1来判断输入何时终止。

    使用数组中的数据时也要应用循环,我这里也用for循环+flag2来判断何时终止数据的使用:用到0了就停止,没用到就正常按流程走。别忘了打印计数器(ctr)的数据后让计数器归零,以便下次循环使用。

    我这个二维数组最多只能输入五次,大家也可以按需多设置点。

#include <stdio.h>

int main()
{
    int x, y, flag1 = 1, flag2 = 1, ctr = 0;
    int arr[5][2];
    for (x = 0; x < 5; ++x)
    {
        if (flag1 == 0)
        {
            break;
        }
        for (y = 0; y < 1; ++y)
        {
            scanf("%d %d", &arr[x][y], &arr[x][y + 1]);
            if (arr[x][y] == 0 || arr[x][y + 1] == 0)
            {
                flag1 = 0;
                break;
            }
        }
    }
    for (x = 0; x < 5; ++x)
    {
        if (flag2 == 0)
        {
            return 0;
        }
        for (y = 0; y < 1; ++y)
        {
            if (arr[x][y] == 0 || arr[x][y + 1] == 0)
            {
                flag2 = 0;
                break;
            }
            else if (arr[x][y] >= arr[x][y + 1] || arr[x][y] <= 999 || arr[x][y + 1] > 9999)
            {
                printf("Error\n");
            }
            else
            {
                for (int j = arr[x][y] % 2 == 0 ? arr[x][y] : arr[x][y] + 1; j <= arr[x][y + 1]; j += 2)
                {
                    if ((j / 1000) != (j / 100 % 10) && (j / 1000) != (j / 10 % 10) && (j / 1000) != (j % 10)
                        && (j / 100 % 10) != (j / 10 % 10) && (j / 100 % 10) != (j % 10)
                        && (j / 10 % 10) != (j % 10))
                    {
                        printf("%d  ", j);
                        ctr++;
                    }
                }
                printf("\ncounter=%d\n", ctr);
                ctr=0;
            }
        }
    }
}
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值