算法入门之蓝桥杯(排他平方数)

题目:小明正看着 203879 这个数字发呆。

原来,203879 * 203879 = 41566646641

这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。

具有这样特点的6位数还有一个,请你找出它!

再归纳一下筛选要求:

  1. 6位正整数
  2. 每个数位上的数字不同
  3. 其平方数的每个数位不含原数字的任何组成数位
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool check(long long x, long long xx) {
    char str1[10];
    char str2[20];
    lltoa(x, str1, 10);//将整数x按十进制转化为字符串str1
    lltoa(xx, str2, 10);
    for (int i = 0; str1[i] != '\0'; i++) {
        for (int j = 0; str2[j] != '\0'; j++) {
            if (str1[i] == str2[j])
                return false;
        }
    }
    return true;
}
/* check函数的功能:排查6位数x各位数上的数字与其平方xx各位上的数字是否重合*/
int main() {
    long long a, b, c, d, e, f;
    for (a = 1; a < 10; a++) {
        for (b = 0; b < 10; b++) {
            if (b != a)
                for (c = 0; c < 10; c++) {
                    if (c != a && c != b)
                        for (d = 0; d < 10; d++) {
                            if (d != a && d != b && d != c)
                                for (e = 0; e < 10; e++) {
                                    if (e != a && e != b && e != c && e != d)
                                        for (f = 0; f < 10; f++) {
                                            if (f != a && f != b && f != c && f != d && f != e) {
                                                long long x = a * 100000 + b * 10000 + c * 1000 + d * 100 + e * 10 + f;
                                                if (check(x, x * x)) {
                                                    printf("%lld %lld \n", x, x * x);
                                                }
                                            }
                                        }
                                }

                        }
                }
        }
    }

    return 0;
}

知识点:

  1. c语言中将数字转化为字符串
    int 型数 itoa( x,字符串名,进制数)
    long型数 ltoa()
    long long型数 lltoa()

  2. str1[i] != ‘\0’
    该语句要放在整个for循环中去看
    for (int i = 0; str1[i] != ‘\0’; i++)
    字符串结尾有一个自带的换行符,str1[i] != '\0’限定i小于换行符检索位的数字。

发布了14 篇原创文章 · 获赞 1 · 访问量 334

猜你喜欢

转载自blog.csdn.net/qq_45797026/article/details/103130906