杭电oj2040-2049————C语言

方便自己复习回顾
我在vc++编译的所以用__int64定义超级大数
2040亲和数
http://acm.hdu.edu.cn/showproblem.php?pid=2040

#include 
int main()
{
	int i,m;int a;
	scanf("%d",&a);
	while(a--){
		scanf("%d%d",&i,&m);
		int sum1=0,sum2=0;
		for(int j=1;j<i;j++){
    		if(i%j==0) {sum1+=j;}//求余相加就行
		}
		for(int n=1;n<m;n++){
    		if(m%n==0) {sum2+=n;}
		}
		if(sum1==m&&sum2==i) {printf("YES\n");}
		else {printf("NO\n");}
	}
	return 0;
}

2041超级楼梯
http://acm.hdu.edu.cn/showproblem.php?pid=2041

#include < stdio.h>
int main(){
	int n, x = 0, a[45] = {1,1,1,2};
	for (int i = 4; i <= 41;i++)
		a[i]= a[i - 1] + a[i - 2];

 	scanf("%d", &n);
 	while(n--){
 		scanf("%d",&x);
 		printf("%d\n",a[x]);
 	}
	return 0;
}

2042不容易系列之二
http://acm.hdu.edu.cn/showproblem.php?pid=2042

#include
int main()
{
	int m,j;
	scanf("%d",&j);
	while(j--){
		int sum1=3,sum2=0;
		scanf("%d",&m);
		for(int i=0;i<m;i++){
			sum2=(sum1-1)*2;
			sum1=sum2;
		}
		printf("%d\n",sum1);
	}
	return 0;
}

2043密码
http://acm.hdu.edu.cn/showproblem.php?pid=2043

#include 
#include 
#include 
int main()
{
	int i,j;char c[50];
	scanf("%d%*c",&j);
	while(j--){
		scanf("%s",c);
		int n=strlen(c),sum1=0,sum2=0,sum3=0,sum4=0;
		int t=0;

		for(i=0;i<n;i++){
    		if(islower(c[i])) {sum1++;}
    		else if(isupper(c[i])) {sum2++;}
    		else if(isdigit(c[i])) {sum3++;}
    		else {sum4++;}
		}
		if(sum1!=0) {t++;}
		if(sum2!=0) {t++;}
		if(sum3!=0) {t++;}
		if(sum4!=0) {t++;}

		if(n>=8&&n<=16&&t>=3)
			{printf("YES\n");}
		else
			{printf("NO\n");}
	}
	return 0;
}

2044一只小蜜蜂…
http://acm.hdu.edu.cn/showproblem.php?pid=2044

#include 
int main()
{
	__int64 s[50]={1,1,2};//数大会溢出
	int j,a,b;
	for(int i=3;i<50;i++){
   		s[i]=s[i-1]+s[i-2];
   	}

	scanf("%d",&j);
	while(j--){
    	scanf("%d%d",&a,&b);
    	printf("%I64d\n",s[b-a]);
	}
	return 0;
}

2045不容易系列之(3)—— LELE的RPG难题
http://acm.hdu.edu.cn/showproblem.php?pid=2045

思路:// n>=4时,考虑前n-1格已经定了情况(合法),由于首尾颜色不同,如果是加1格的话,其颜色只有1种可选,所以如果n格是从n-1格的基础上加一格而来,那么涂法数量是相同的,即这种情况f(n)=f(n-1);//考虑前n-2格已经定了情况,n-1取与第1格颜色相同(这个情况不会与前n-1格合法重叠),那么第n格有2种颜色可选,即这种情况f(n)=f(n-2)*2。综合这两种情况得f(n)=f(n-2)*2。

#include 
int main() { 
    int n, i;
    __int64 a[50]={3, 6, 6};   
    for(i=3; i<50; i++)
       { a[i] = a[i-1] + a[i-2] * 2;}

    while(~scanf("%d", &n)) {
        printf("%I64d\n", a[n-1]);
    }
    return 0;
}

2046题骨牌铺方格
http://acm.hdu.edu.cn/showproblem.php?pid=2046
又是斐波那契数列

#include 
int main()
{
    __int64 a[51]={0,1,2};int n;
    for(int i=3;i<=50;i++)
        a[i]=a[i-1]+a[i-2];
    while(~scanf("%d",&n))
    {
        printf("%I64d\n",a[n]);
    }
	return 0;
}

2047阿牛的EOF牛肉串
http://acm.hdu.edu.cn/showproblem.php?pid=2047

#include 
int main()
{
	int n;
	__int64 s[40]={3,8};
	for(int i=2;i<40;i++)
		{s[i]=2*(s[i-1]+s[i-2]);}

	while(~scanf("%d",&n)){
		printf("%I64d\n",s[n-1]);
	}
	return 0;
}

2048、2049这两题很相似

2048神、上帝以及老天爷
http://acm.hdu.edu.cn/showproblem.php?pid=2048

#include 
int main(){
    int c,i;
    scanf("%d",&c);
    while(c--){
        int n;
        scanf("%d",&n);
        double a[20]={1,2},b[20]={2,6};
        
        for(i=2;i<20;i++){
            a[i]=(i+1)*(a[i-1]+a[i-2]);
            b[i]=b[i-1]*(i+2);
        }
	 printf("%.2lf%%\n",a[n-2]/b[n-2]*100);
	 }
     return 0;
}

2049不容易系列之(4)——考新郎
http://acm.hdu.edu.cn/showproblem.php?pid=2049

#include
int main(){
    int c;
    scanf("%d",&c);
    while(c--){
        int n,m,i,j,b=1;
        scanf("%d%d",&n,&m);
        __int64 a[21]={0,0,1,2},s;
        
        for(i=3;i<=m;i++)
            a[i]=(i-1)*(a[i-1]+a[i-2]);//把m个人全排错的可能种数存放在数组a中,全排错参见2048
            
        for(i=n-m+1,j=1;i<=n;i++,j++)
            b=b*i/j;//计算n个人当中m个人的选取种数
        s=b*a[m];
        printf("%I64d\n",s);
    }
    return 0;
}

你可能感兴趣的:(杭电oj2040-2049————C语言)