c++ 编程找出满足ABCD*E=DCBA的互不相同A B C D E的五个数字

#include <iostream>

using namespace std;
//1. 编程找出满足ABCD*E=DCBA的互不相同A B C D E的五个数字
//互不相同A B C D E

//purpose:bdifferent这个函数是来判断ABCD是否各不相同
bool bdifferent(int aryList[4]){
    /*
    这里采用了数组的方式来表示nArr[0]就代表A,nArr[1]就代表B,nArr[2]就代表C,nArr[3]就代表D
    代码中用了最朴素的方式来看ABCD是否各个都不同。这里提供另一种思路,但时间复杂度高不如最朴素的
    for(int i=0;i<4;i++){
        int j=0;
        for(j=i;j<4;j++){
            if(aryList[i]==aryList[j]){
            return true
            }
        }
    }
    return false
    */
 	
    if(aryList[0]==aryList[1]||aryList[0]==aryList[2]||aryList[0]==aryList[3]||aryList[1]==aryList[2]||aryList[1]==aryList[3]||aryList[2]==aryList[3])  return true;
    return false;
}
//purpose:bdifferentE这个函数是来判断E是否和ABCD不相同
bool bdifferentE(int aryList[4],int nE){
     //遍历输出ABCD和E相比
 	 for(int i=0;i<4;i++){
         if(aryList[i]==nE){
             return true;
         }
    }
    return false;
}
//purpose:打印ABCDE
void aryprint(int aryList[4],int nE){
    cout<<"ABCDE为:"<<endl;
    for(int i=0;i<4;i++){
        cout<<aryList[i]<<" ";
    }
    cout<<nE<<endl;
}

int main()
{
    int aryList[4];//创建一个数组用于存放ABCD
    for(int i=1000;i<9999;i++){//循环获取全部的四位数
        int y = 3;//用于方便表示数组下标arrList[3]就是表示D
        int nTmp1 = i;//获取当前四位数
        //purpose:这个循环用于将i去摸获取最后一位数放入数组中,然后对nTmp1除十,直到四位数都放入数组中
        while(nTmp1!=0){
            aryList[y]=nTmp1%10;
            nTmp1/=10;
            y--;
        }
        //purpose:判断当前数组ABCD是否各不相同,如果相同则continue进入下一个循环,不同则继续执行下面的代码
        if(bdifferent(aryList)){
            continue;
        }
        //purpose:将数字倒序放入nTmp3,nTmp3的数表示DCBA
        int nTmp2 = i;
        int nTmp3 = 0;
        while(nTmp2!=0){
            int nNum=nTmp2%10;
            nTmp2/=10;
            nTmp3 = nTmp3*10 + nNum;
        }
        //purpose:模拟ABCD*E=DCBA
        for(int e=1;e<=9;e++){
            if((i*e)==nTmp3){
                if(bdifferentE(aryList,e)){
                    continue;
                }
                aryprint(aryList,e);
                break;
            }

        }
    }
    return 0;
}





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值