解题思路:   之前写过这个题的题解,(看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;
}


点赞(37)
 

0.0分

24 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 6 条评论

林老师 3年前 回复TA
简直完美
LBD西瓜泥 3年前 回复TA
函数运用恰当,值得学习
LBD西瓜泥 3年前 回复TA
写的漂亮,厉害
bitdoge 3年前 回复TA
写的好呀!
yaoking 5年前 回复TA
真的完美
c晨光 6年前 回复TA
真的很厉害,函数的运用很完美