解题思路: 之前写过这个题的题解,(看sprintf()函数)突发想到了这个,回来在补一波简单的操作!!
首先分析一下取值范围:有三个值假设abc:def:ghi=1:2:3;并且abcdefghi分别代表一个数字保证不重复。(懂我说的意思吧) 我们只用确定abc这个数的范围就可以知道其他两个数的对应值,然后暴力求解即可。首先abc最小肯定是123,ghi最大是987;那么abc最大就是ghi/3=329;然后我们枚举123到329之间的值(范围也不大),对应def的值就是2*abc,ghi的值就是3*abc;每一趟遍历对应abc、def、ghi的值都能确定,我们可以吧abc、def、ghi写入到一个指定的字符串数组中,然后排序,根据字典序和我们最开始设置的"123456789"这个字符串比较,相同的话说明1到9每个数字都用到了,反之不合题意;思路就是这。说说用到的函数吧 strcmp()和sprintf()函数:
strcmp():
原型:int strcmp(const * char s1, const * char s2);
头文件:<string.h>
功能:比较字符串s1和字符串s2的大小(按字典序)比如:abc大于abd 因为c>d(字典序)
sprintf():
原型:int sprintf(char * buff, const * format[,argu,.....],)
头文件:<stdio.h>
功能:把对应的内容写入到指定字符串中;其实这个函数和printf函数一样的只是printf把 数据写到屏幕上,而sprintf函数把数据写入指定指定字符串中;就是比printf多了一个参数,其他参数和printf一样;
关于sprintf()大家可以看看,博客,相信一看就懂,真的!!! 谢谢(留赞)
注意事项:
参考代码:
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <functional> using namespace std; int main() { char str[10]="123456789"; char s[10]; for(int abc = 123; abc <= 329; ++abc) { sprintf(s, "%d%d%d", abc, 2*abc, 3*abc); sort(s,s+9); if(strcmp(s,str) == 0) { printf("%d %d %d\n", abc, 2*abc, 3*abc); } } return 0; }
0.0分
28 人评分
C语言训练-排序问题<1> (C语言代码)浏览:636 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:591 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1090 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:597 |
蛇行矩阵 (C语言代码)浏览:606 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:645 |
DNA (C语言代码)浏览:837 |
妹子杀手的故事 (C语言代码)浏览:1153 |
前10名 (C语言代码)浏览:773 |
敲七 (C语言代码)浏览:2748 |