C语言程序设计-把1、2、3、4、5、6、7、8、9组合成三个三位数,要求每个数字仅用一次,且每个三位数均是完全平方数

C语言程序设计-把1、2、3、4、5、6、7、8、9组合成三个三位数,要求每个数字仅用一次,且每个三位数均是完全平方数,第1张

设计思路
  1. 把1到9能组合的三位数求出来
  2. 计算出这些三位数中是完全平方数的部分
 	int arr[]={1,2,3,4,5,6,7,8,9};
    int num;
    for (int i = 0; i < 9; ++i) {//找出三个数的完全平方数
        for (int j = 0; j < 9; ++j) {
            for (int k = 0; k < 9; ++k) {
                if(i==j||i==k||j==k){//当每个数字不重复时才能进行下一步
                    continue;
                }
                num = arr[i]*100+arr[j]*10+arr[k];
                if((int)sqrt(num)* (int)sqrt(num)==num){//组合完成的三位数放到新数组trr中
                    trr[l++] = num;
                }

            }
        }
    }
  1. 从步骤2所得的数字钟筛选出所需要的数
for (int i = 0; i < l; ++i) {
        for (int j = i; j <l; ++j) {
            for (int k = j; k < l; ++k) {
                int flag =0;
                flag = getResult(trr[i],trr[j],trr[k]);//flag==1时表示符合问题的结果
                if(flag==1){
                    printf("%d,%d,%d",trr[i],trr[j],trr[k]);
                }
            }
        }
}

把随机获得的三个三位数拆开放到数组中,判断数组中是否有重复的数字。


如果没有则证明符合题目条件,否则继续进行下一轮判断

int getResult(int a,int b,int c){
    int arr[9]={0};
    for (int i = 0; i < 3; ++i) {
        arr[i] = a%10;
        a = a/10;

        arr[i+3] = b%10;
        b = b/10;

        arr[i+6] = c%10;
        c = c/10;
    }
    for (int i = 0; i < 9; ++i) {
        for (int j = i+1; j <9; ++j) {
            if(arr[i]==arr[j]){
                return 0; //有重复数
            }
        }
    }
    return 1;
}    

完整代码

#include 
#include 
void getNum();
int getResult(int a,int b,int c);
int main(){
    getNum();
    return 0;
}
void getNum(){
    int arr[]={1,2,3,4,5,6,7,8,9};
    int trr[9],l;
    int num;
    for (int i = 0; i < 9; ++i) {//找出三个数的完全平方数
        for (int j = 0; j < 9; ++j) {
            for (int k = 0; k < 9; ++k) {
                if(i==j||i==k||j==k){
                    continue;
                }
                num = arr[i]*100+arr[j]*10+arr[k];
                if((int)sqrt(num)* (int)sqrt(num)==num){
                    trr[l++] = num;
                }

            }
        }
    }
    //输出其中不重复的三个完全平方数
    for (int i = 0; i < l; ++i) {
        for (int j = i; j <l; ++j) {
            for (int k = j; k < l; ++k) {
                int flag =0;
                flag = getResult(trr[i],trr[j],trr[k]);
                if(flag==1){
                    printf("%d,%d,%d",trr[i],trr[j],trr[k]);
                }
            }
        }
    }
}
int getResult(int a,int b,int c){
    int arr[9]={0};
    for (int i = 0; i < 3; ++i) {
        arr[i] = a%10;
        a = a/10;

        arr[i+3] = b%10;
        b = b/10;

        arr[i+6] = c%10;
        c = c/10;
    }
    for (int i = 0; i < 9; ++i) {
        for (int j = i+1; j <9; ++j) {
            if(arr[i]==arr[j]){
                return 0; //有重复数
            }
        }
    }
    return 1;
}

运行结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存