ACM:蓝桥杯:排它平方数
2016-06-05 16:23
267 查看
题目标题: 排它平方数
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数
c++版本
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数
#include<stdio.h> #include<math.h> int quchong(int yy) { //去重函数,判断一个数中是否在0~9中没有重复 int arr[10]={0},flag=1,k=0; int t=yy; while(t) { arr[k++]=t%10; t=t/10; } for(int i=0;i<k;i++) { for(int j=i+1;j<k;j++) { if(arr[i]==arr[j]) flag=0; } } return flag; } int main(void) { int a; int xx,yy; for(a=100000;a<=999999;a++) { if(quchong(a)==1)///先判断数字 { int aa[10]={0}; int x=a; while(x)//将数字拆分存入数组 { aa[x%10]=1;//将有的数字的角标标记 x=x/10; } double s=(double)a*a; long long y=s; //long long 可以存17位数,并可以取余 while(y) { if(aa[y%10]!=0)///对比,如果有相同的直接跳过 break; else y=y/10; } if(y==0) { if(a!=203879) printf("%d ",a); } } else continue; } }
c++版本
#include<iostream> using namespace std; int quchong(int x) {//判断一个数里面是否有相同的数字构成 int a[10]={0},flag=1,k=0; while(x) { a[k++]=x%10; x=x/10; } for(int i=0;i<k;i++) for(int j=i+1;j<k;j++) if(a[i]==a[j]) flag=0; return flag; } int main() { int x; for(x=100000;x<=999999;x++) { if(quchong(x)==1) { int a[10]={0},k=0,q; q=x; while(q) {//将每个数字标记为1 a[q%10]=1; q=q/10; }//长整形,必须进行强制类型转换 long long s=(long long)x*x; while(s) {//判断数字构成跟上面的数字构成是否相同 if(a[s%10]!=0) break; else s=s/10; } if(s==0) cout<<x<<" "; } else continue; } }
相关文章推荐
- Linux C函数参考手册(PDF版)
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#用链式方法表达循环嵌套
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C++中explict关键字用法
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析