HDU1164 Eddy’s research I
题目大意:分解质因数,输入一个数字将其分解为几个质数之和。
解题思路:首先计算出比65535小的质数存到数组中,然后从按从小到大的顺序遍历数组看能否整除输入的数字,若能就输出,还要看是否能多次整除,若不能就continue。
注意:考虑到输出的格式要求,另设了一个变量来判断是不是第一个数字;要记得考虑到同一个质数可以使用多次的情况。
#include
using namespace std;
int num[10000+5];//存放质数
int prime(int x)
{
if(x==2)
return 1;
else
{
for(int i=2; i*i<=x; ++i)
if(x%i==0)
return 0;
}
return 1;
}
int main()
{
int cnt=0;//质数个数
for(int i=2; i<=65535; ++i)
if(prime(i))
num[cnt++]=i;
int n;
while(cin>>n)
{
int flag=1;//是不是第一个数
for(int i=0; i
HDU1170 Balloon Comes!
题目大意:前缀表达式,而且是只有1个运算符和2个运算数的情况。
解题思路:水题,略。
注意:有小数的时候才会保留2位小数,能够整除的话就不用保留小数啦;cout会WA,格式输出建议用printf()。
#include
#include
using namespace std;
int main()
{
int n;
char c;
int a,b;
cin>>n;
while(n--)
{
cin>>c>>a>>b;
if(c=='+')
cout<
HDU1194 Beat the Spread!
题目大意:输入两个非负整数的和和差,看能否找到符合条件的两个非负整数。
解题思路:硬算,由于整数除法的特殊性,算出结果在验算一遍就能知道是否会出现小数(详见代码)。
注意:非负整数!
#include
using namespace std;
int main()
{
int sum,dif;
int t;
int a,b;
while(cin>>t)
{
while(t--)
{
cin>>sum>>dif;
a=(sum+dif)/2;
b=(sum-dif)/2;
if(a+b==sum&&a-b==dif&&a>=0&&b>=0)
cout<
HDU1202 The calculation of GPA
题目大意:略。
解题思路:水题,输入一门成绩计算一门即可。
注意:GPA的算法,分母是学分之和;s,p是实数,而没说是整数,要用double类型。
#include
#include
using namespace std;
int main()
{
int t;
double s,p;
double sum,score;
while(cin>>t)
{
sum=0.0;
score=0.0;
while(t--)
{
cin>>s>>p;
if(p==-1)
continue;
score+=s;
if(p>=90)
sum=sum+4*s;
else if(p>=80)
sum=sum+s*3;
else if(p>=70)
sum=sum+s*2;
else if(p>=60)
sum=sum+s;
}
if(score)//有成绩
printf("%.2lf\n",sum/score);
else
cout<<-1<
HDU1205 吃糖果
题目大意:略。
解题思路:主要看数量最多的糖果,设为maxn,糖果总数为sum。如果sum是奇数,那么maxn<=sum/2+1;如果sum是偶数,那么maxn<=sum/2;将两式合并可得maxn<=(sum+1)/2,满足这个条件才可以。
注意:一定要理解好题意,Mi是糖果的数目,不是糖果的编号;注意输出的大小写,我就WA在这了。。。
#include
#include
using namespace std;
int main()
{
int t,n;
int maxn;
long long sum;//注意范围
int cnt;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d",&n);
maxn=0;
sum=0;
for(int i=0; imaxn)
maxn=cnt;
}
if(maxn>(sum+1)/2)
printf("No\n");
else
printf("Yes\n");
}
}
return 0;
}