问题描述
从键盘输入一个数字, 输出所有的形如 ABC*DE 的一个算式, 且满足 ABCDE 里面的所有数字都在我们输入的数字集合中.
在这个算式中, 每行数字都属于 2357 中的一个数字.
Algorithm
如果是在以前, 我肯定会这么做:
首先枚举这两个数 ABC 和 DE, 然后判断他们算式相乘的两个数以及结果, 不断模 10 来判断是否每一个数字都属于输入的数字.
但是我发现了一个很厉害的函数: sprintf
简单来说, sprintf 可以将数字储存到一个字符串里面.
此外, 还有另一个函数: strchr
它的作用是检查某一个元素在一个字符串里第一次出现的位置, 如果有, 返回一个指针, 反之返回 NULL.
现在看完整代码.
AC
- #include<iostream>
- #include<cstring>
- #include<cstdio>
- using namespace std;
- int fun()
- {
- char a[11], temp[99];
- int c = 0;
- cin>>a;
- for(int i=100;i<1000;i++){
- for(int j=10;j<100;j++){
- sprintf(temp, "%d%d%d%d%d", i, j, (j%10)*i, (j/10)*i, i*j);
- bool f = true;
- for(int k=0;k<strlen(temp);k++){
- if(strchr(a, temp[k]) == NULL){
- f = false;
- break;
- }
- }
- if(f){
- printf("<%d>\n", ++c);
- printf("]\n", i);
- printf("XM\n", j);
- printf("-----\n");
- printf("]\n", i*(j%10));
- printf("M\n", i*(j/10));
- printf("-----\n");
- printf("]\n", i*j);
- }
- }
- }
- if(!c) cout<<"NULL, pleas input next..."<<'\n';
- return 0;
- }
- int main()
- {
- while(1)
- {
- fun();
- }
- return 0;
- }
- View Code
来源: http://www.bubuko.com/infodetail-2947441.html