问题标题: 其他:1118 - 既生瑜,何生亮!求解

0
0
已解决
彭志杰
彭志杰
初级天翼
初级天翼

啊这个是个东方博宜的题目,劳烦各位大神帮忙看一下本蒟蒻的 垃 圾 代码:(样例不过)

#include<bits/stdc++.h>
using namespace std;
bool cmp(int b){
    int a[10],cnt=0,t[15];
    while(b){
        a[++cnt]=b%10;
        b/=10;
    }
    for(int i=1;i<=4;i++){
        t[a[i]]++;
    }
    for(int i=1;i<=10;i++){
        if(t[i]>1) return false;
    }
    return true;
}
bool check(int a){
    if(a*a>=1000000&&a*a<=9999999&&cmp(a)) return true;
    return false;
}
int x,y;
int main(){
    cin>>x>>y;
    for(int i=x;i<=y;i++){
        if(check(i)) cout<<i<<endl;
    }
    return 0;
}

题目如下:


1
已采纳
沙宸安
沙宸安
中级启示者
中级启示者

① 题目要求的是平方过后的七位数每位互不相同,而不是平方前的四位数,因此cmp的应该要是a*a

② 考虑如下情况:

1003^2=1006009,很明显,这里的‘0’出现多次,应该舍去,但是你的代码很明显无法舍去,因为你检验t数组是从1出现的次数检验到10出现的次数的(虽然没有10),因而检验不到0出现的次数

③ 最后,你遗忘了一个非常重要的问题:函数内声明数组要先赋初值的,不然会给随机数

0
陈子明
陈子明
中级光能
中级光能

看不见,题目字太小了

我要回答