例题7-1 UVA 725 Division除法
2015-12-20 23:14
246 查看
思路不太好,借鉴一下吧
整体思路:分析可知第一个数肯定是个五位数,第二位要么是五位数,要么是四位数,所以呢,第一个循环直接扫第一个五位数,从10000扫到99999只有当五个数字各不相同,并且通过除法算出第二个数,判断两个数各个数字都不相同即可输出:
整体思路:分析可知第一个数肯定是个五位数,第二位要么是五位数,要么是四位数,所以呢,第一个循环直接扫第一个五位数,从10000扫到99999只有当五个数字各不相同,并且通过除法算出第二个数,判断两个数各个数字都不相同即可输出:
#include<cstdio> #include<string.h> using namespace std; const int maxn = 10; int judge(int num){ int cont = 0,flag[maxn] = {0}; while(num != 0){ int a = num % 10; flag[a] = 1; num /= 10; } for (int i = 0; i < maxn; ++i)if (flag[i])cont++; if (cont == 5)return 1; if (cont == 4 && !flag[0])return 2; return 0; } int judge2(int num1,int num2){ int flag[maxn] = {0},cont = 0; while(num1 != 0){ int a = num1 % 10; flag[a]++; num1 /= 10; } while(num2 != 0){ int a = num2 % 10; flag[a]++; num2 /= 10; } for (int i = 0; i < maxn; ++i){ if (flag[i] != 1)cont++; } if (cont == 1 && !flag[0])return 2; if (cont)return 0; if (!cont)return 1; return 0; } int main() { int N,cont2 = 0,cont = 0; while (scanf("%d",&N) == 1 && N){ cont2++; cont = 0; if (cont2 > 1)printf("\n"); for (int i = 10000; i < 99999; ++i){ if (judge(i) == 1){//1 is 5 2 is 4,0 is no! int num2 = i / N; if (judge2(i,num2) && N * num2 == i){ cont++; if (judge2(i,num2) == 1)printf("%d / %d = %d\n",i,num2,N); else printf("%d / 0%d = %d\n",i,num2,N); } } } if (!cont)printf("There are no solutions for %d.\n",N); } return 0; }
相关文章推荐
- Java 回调机制
- 链表-单向链表-值传递&地址传递
- mybatis基础与核心类
- 深(浅)复制与retain
- 短信的自动拦截
- 2015第52周日
- 张国祥老师应邀在上海交大讲授流程优化与建设方法课程
- [javase学习笔记]-6.7 封装
- ubuntu从tty终端模式返回到图形桌面
- 源码解析Android中View的layout布局过程
- 重载构造函数(相同运算结果,不同性能比较)
- Spring Boot学习笔记-快速示例
- iOS 中的观察者模式, KVO, 通知
- Remove Duplicates from Sorted Array
- CentOS的Linux操作系统图形界面开启
- Sql 工具的使用
- RabbitMQ部署流程
- 如何调用百度的api
- 服务器远程监控管理(二)-系统远程安装部署
- java垃圾回收