杭电历年复试题目——2011年

申明:写本篇文章的目的是为了方便自己使用,以下代码纯属自己编写,因为没有评测系统,因此无法保证正确性,若有人看到错误,请指正,谢谢。

题目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");
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值