咖啡


私信TA

用户名:Tianxn

访问量:128011

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 8
经  验 26033
参赛次数 10
文章发表 197
年  龄 22
在职情况 学生
学  校 西安电子科技大学
专  业 软件工程

  自我简介:

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

  评论区

简直完美
2021-12-08 21:21:21
函数运用恰当,值得学习
2021-08-17 16:08:06
写的漂亮,厉害
2021-08-17 16:07:35
写的好呀!
2021-08-11 19:45:52
真的完美
2019-12-03 20:03:10
真的很厉害,函数的运用很完美
2018-12-08 14:05:38
  • «
  • 1
  • »