申明:写本篇文章的目的是为了方便自己使用,以下代码纯属自己编写,因为没有评测系统,因此无法保证正确性,若有人看到错误,请指正,谢谢。
题目1:输入三个正整数A、B、C。判断这三个数能不能构成一个三角形。
#include<stdio.h>
int main()
{
double a,b,c;
while(scanf("%lf %lf %lf",&a,&b,&c)!=EOF)
{
if((a+b)>c&&(a+c)>b&&(b+c)>a)
printf("YES\n");
else printf("NO\n");
}
}
题目2:有个人从2003年1月1日开始,三天打鱼两天晒网,请输入月份、日期,问在当年的某一天他是在打鱼还是在晒网。
#include<stdio.h>
int main()
{
int mm,dd,sum;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
while(scanf("%d %d",&mm,&dd)!=EOF)
{
sum=0;
for(int i=1;i<mm;i++)
sum=sum+month[i];
sum=sum+dd-1;//距离1月1号的天数
if(sum%5<3)
printf("打鱼\n");
else printf("晒网\n");
}
}
PS:闰年的判断方法是:四年一闰,百年不闰,四百年再闰。闰年29天。
bool fun(int year){
if((year%4==0&&year%100!=0)||year%400==0)
return true;
return false;
}
题目3:
丑数是这样定义的:如果一个正整数的素因子只包含 2、3、5、7四种,则它被称为丑数。以下数列 1, 2, 3,4, 5,6,7,8,9, 10,12,14,15,16,18, 20, 21,24,25, 27………. 就显示了前20个丑数。
给出一个正整数N,判断这个数是否为丑数。
#include<stdio.h>
bool is_ugly(int num)
{
while(num%7==0)
num=num/7;
while(num%5==0)
num=num/5;
while(num%3==0)
num=num/3;
while(num%2==0)
num=num/2;
if(num==1)
return true;
return false;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(is_ugly(n))
printf("YES\n");
else printf("NO\n");
}
}
本题类似于杭电oj1058。但是以上的做法会超时。所以,我们在此基础上进行优化,用动态规划来做本道题。
#include<stdio.h>
#define MAX 10000
int min(int a,int b)
{
return a<b?a:b;
}
int minn(int a,int b,int c,int d)
{
return min(a,min(b,min(c,d)));
}
int main()
{
int n,i;
int dp[MAX];//第i个丑数为dp[i]
dp[1]=1;
int f2=1,f3=1,f5=1,f7=1;
for(i=2;i<MAX;i++)
{
dp[i]=minn(dp[f2]*2,dp[f3]*3,dp[f5]*5,dp[f7]*7);
if(dp[i]==dp[f2]*2) f2++;
if(dp[i]==dp[f3]*3) f3++;
if(dp[i]==dp[f5]*5) f5++;
if(dp[i]==dp[f7]*7) f7++;
}
while(scanf("%d",&n)!=EOF)
{
for(i=1;dp[i]<n;i++);
if(dp[i]==n)
printf("YES\n");
else printf("NO\n");
}
}