转载请注明出处:http://www.cnblogs.com/xianyue
题1:表达式
题目描述
给你三个数a,b,c,要求你在a,b,c之间加上加号“+”或者乘号“*”以及小括号,是的得到的表达式的结果最大,求这个最大的答案。
举个例子,对于1,2,3来说:
- 1+2*3=7
- 1*(2+3)=5
- 123=6
- (1+2)*3=9
所以答案是9。
输入
三个整数a,b,c(1<=a,b,c<=10)。
输出
所有表达式中能够得到的最大的值。
样例输入
1
2
3
样例输出
9
题解
可以发现对于a,b,c来说表达式总共就只有6种,即:
- a+b*c
- a*(b+c)
- a*b*c
- (a+b)*c
- a+b+c
- a*b*c
所以我们只要求出上面6个表达式中的最大值就可以了。
代码
#include <iostream>
using namespace std;
int a, b, c;
int main()
{
cin >> a >> b >> c;
cout << max(
max(
max(a+b*c, (a+b)*c),
max(a*b+c, a*(b+c))
),
max(a+b+c, a*b*c)
) << endl;
return 0;
}
题2:计算函数
题目描述
函数f的表达式如下:
f(n) = -1+2-3+..+(-1)^n*n
对于一个给定的正整数n,计算f(n)。
输入
一个正整数n。
输出
f(n)。
样例输入1
4
样例输出1
2
样例输入2
5
样例输出2
-3
注:
f(4) = - 1 + 2 - 3 + 4 = 2
f(5) = - 1 + 2 - 3 + 4 - 5 = - 3
题解
如果n为偶数,f(n)=n/2
如果n为奇数,f(n)=-(n+1)/2
代码
#include <iostream>
using namespace std;
long long f(long long n)
{
if (n % 2 == 0)
return n / 2;
else
return - (n + 1) / 2;
}
long long n;
int main()
{
cin >> n;
cout << f(n) << endl;
return 0;
}
题3 数学理论
题目描述
给你一个大于等于12的数,将它表示成两个合数之和。
注:
- 素数是指除了1和它本身外不能被别的书整除的正整数
- 合数是指除了素数以外的正整数
输入
一个数n
输出
任意两个合数,用空格分隔。使得这两个合数之和为n。
样例输入
12
样例输出
4 8
题解
可以发现,如果n是偶数的话,可以表示成4和n-4之和。其中4和n-4必为合数。
如果n为奇数的话,只能美剧一个数a是4,6,8……这样下去,然后判断另一个数n-a是不是合数了。
代码
#include <iostream>
using namespace std;
int n;
bool check(int m)
{
for (int i = 2; i *i <= m; i ++)
if (m % i == 0)
return true;
return false;
}
int main()
{
cin >> n;
if (n % 2 == 0)
cout << 4 << " " << n - 4 << endl;
else
for (int i = 4; i < n; i += 2)
if (check(n-i))
{
cout << i << " " << n - i << endl;
break;
}
return 0;
}
题4:柠檬汁
题目描述
丽丽很喜欢和柠檬汁,她家里的冰箱里放了n瓶柠檬水(这里假设柠檬水就是柠檬汁和水的混合物),每一瓶柠檬水中柠檬汁的含量可能不一样。
有一天丽丽回来很渴,所以她决定把n瓶柠檬水混到一个大杯子里面一口气喝完,但是在喝之前她想知道这瓶混合柠檬水的柠檬汁的比例。
输入
第一行包括一个正整数n,表示冰箱里之前放的柠檬水的杯数。
第二行包括n个整数,分别表示n杯柠檬水中柠檬汁的百分比。
输出
求混合柠檬水中柠檬汁的百分比。
样例输入
3
50 50 100
样例输出
66.666666666667
题解
可以看出这道题就是求一个平均数。
代码
#include <iostream>
using namespace std;
int n, a, s = 0;
int main()
{
cin >> n;
for (int i = 0; i <n; i ++)
{
cin >> a;
s += a;
}
cout << (double)s / (double)n << endl;
return 0;
}
题5: 找数
题目描述
找一个n位正整数,并且它能够被t整除。
输入
一行两个数n和t。(1<=n<=100, 2<=t<=10)
输出
输出能够被t整除的n位正整数。
样例输入
3 2
样例输出
712
题解
首先我们来分析一下能被2到10的这些数整除的输的特征:
- 被2整除:偶数,即末位是0,2,4,6,8即可。
- 被3整除:所有的位数之和为3的倍数。
- 被4整除:后两位是4的倍数。
- 被5整除:末尾是0或5.
- 被6整除:所有位数之和是3的倍数,并且是偶数。
- 被7整除:这个比较麻烦,暂时不分析。
- 被8整除:后三位是8的倍数。
- 被9整除:所有的位数之和是9的倍数。
- 被10整除:末位是0。
然后分析一下可以发现,如果t是{2,3,4,5,6,7,8,9}的话,我们的答案是n个t就可以了。
如果t是10,则答案是n-1个1加一个0就是其中的一个答案。
只有n1且t10时没有答案。
所以可以按照这种描述写代码。
代码
#include <iostream>
using namespace std;
int n, t;
int main()
{
cin >> n >> t;
if (n == 1 && t == 10)
cout << -1 << endl;
else if (t < 10)
{
for (int i = 0; i < n; i ++)
cout << t;
cout << endl;
}
else
{
for (int i = 1; i < n; i ++)
cout << "1";
cout << "0" << endl;
}
return 0;
}