C语言寻找特殊偶数(BIT)

题目内容:

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

输入格式:

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

输出格式:

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

输入样例:

3000 3020

6040 6090

0 0

输出样例:

3012  3014  3016  3018

counter=4

6042  6048  6052  6054  6058  6072  6074  6078  6082  6084

counter=10

输入样例:

9 101

87 -1

0 0

输出样例:

Error

Error

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int LEN = 2296;
void decide(int left,int right)
{
    int counter=0,i,digit[4],m,j,k,flag,special[2296]={0};//数组长度以变量为参数时有的编译器不能在声明时赋值
    if(left<=right&&1000<=left&&right<=9999)
    {
        for(i=left;i<=right;i++)
        {
          if(i%2==0)
          {
            int ic=i;//复制i
            memset(digit,0,4);//归零,也可以采用循环
            for(m=0;m<4;m++)//存储各数位
            {
                digit[m]=ic%10;
                ic/=10;
                //if(ic==0)break;
            }//退出循环时记录了m=4位数字
            flag=1;
            for(j=0;j<m-1;j++)//判断各数位是否相等
            {
                for(k=j+1;k<m;k++)
                {
                    if(digit[j]==digit[k])
                    {
                        flag=0;
                        break;
                    }
                }
            }
            if(flag==1)//存储特殊数
            {
                special[counter++]=i;
            }
          }
        }
    for(m=0;m<LEN;m++)//输出特殊数
    {
        if(special[m]!=0)
        {printf("%d  ",special[m]);}
        else break;
    }
    printf("\n");
    printf("counter=%d\n",counter);
    }
    else if(left==0&&right==0){;}
    else printf("Error\n");
}
int main()
{
    int left,right;
    do{
        scanf("%d %d",&left,&right);
        decide(left,right);
    }while(left*left+right*right!=0);
    system("pause");
    return 0;
}

这里我们将special数组长度定为2296,保证能存储完所有特殊偶数(一直有个保密样例过不了,猜测可能区间长度很大1000~9999共2296个特殊偶数,但这样也比较费内存)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值