#CYF0020. 最大化乘积
最大化乘积
题目背景
这是一个简单的数学问题,同时也在考核 int128
的使用方式,int128
需要自己编写输入和输出函数,不可使用 cin 、cout、scanf、printf
完成。具体内容看下方代码:
__int128 read() {
__int128 res = 0; // 结果
string s; cin >> s; // 直接读取字符串即可
for(int i = 0; i < s.size(); i++) {res *= 10, res += s[i] - '0';} // 将字符串每一位处理出来记录在 res 中
return res; // 将结果返回出去
}
void print(__int128 num){
if(num > 9) print(num / 10); // 递归输出知道结束。
putchar(num % 10 + '0'); // 输出其实是以字符的方式输出的
}
小 C
发现一个数字可以分为两个数字的和,比如: 6
可以分为 0 + 6
、1 + 5
、2 + 4
、3 + 3
、4 + 2
、 5 + 1
、6 + 0
,然后这两个数字的乘积根据数字的不同结果也是不同的。比如 : 0 * 6 = 0
、1 * 5 = 5
、2 * 4 = 8
、3 * 3 = 9
、···
题目描述
小 C
想要最大化这个乘积,操作是:选择两个和为 的数字 ,使得这两个数字的乘积是所有选择方案中最大的。
输入格式
输入一行。
第一行输入一个正整数 。
输出格式
输出两行。
第一行输出满足题意的两个正整数 。
第二行输出最大的乘积。
样例 #1
样例输入 #1
6
样例输出 #1
3 3
9
样例 #2
样例输入 #2
12
样例输出 #2
6 6
36
提示
样例解释】:
【样例解释1】:见题面。
【样例解释2】:无
数据范围】:
对于 的数据保证 。
对于 的数据保证 。
对于 的数据保证 。