HDOJ第一页水题集

我说要把第一页刷完我就会刷完的!干巴爹!

 1039  Easier Done Than Said?

#include<cstdio>
#include<string>
bool iv(char c){
	if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return true;
	else return false;
}
int main(){
	int i,co;
	char pw[21];
	bool vo;
	while(scanf("%s",pw)){
		if(!strcmp(pw,"end")) break;
		i=0;
		vo=false;
		co=0;
		while(pw[i]!='\0'){
			if(pw[i]==pw[i+1]) if(pw[i]!='e'&&pw[i]!='o') break;
			if(!vo&&iv(pw[i])) vo=true;
			if(pw[i+1]!='\0') if(!(iv(pw[i])^iv(pw[i+1]))) co++;
			else co=0;
			if(co==2) break;
			i++;}
		if(pw[i]=='\0'&&vo) printf("<%s> is acceptable.\n",pw);
		else printf("<%s> is not acceptable.\n",pw);
	}
	return 0;
}

1040 As Easy As A+B

#include<iostream>
using namespace std;
int main(){
	int ca,n,nu[1001],i,in,j;
	cin>>ca;
	while(ca>0){
		cin>>n;
		for(i=0;i<n;i++) cin>>nu[i];
		for(j=0;j<n;j++){
			in=0;
			while(!nu[in]) in++;
			for(i=in+1;i<n;i++) if(nu[i]) if(nu[i]<nu[in]) in=i;
			if(!j) printf("%d",nu[in]);
			else printf(" %d",nu[in]);
			nu[in]=0;
		}
		printf("\n");
		ca--;
	}
	return 0;
}

1041 Computer Transformation

机房时间到了,撤

大数,因为两个小点WA了N次

1)由2^n-1 求2^n 时,先乘,再进位

2)   输出大数时格式控制(%06d),把中间的0补足

#include<iostream>   
#include<cmath>   
#include<memory>   
using namespace std;
#define max 999999
#define mill 1000000
int f0[100];  
int pow2[1010][100];

void bigplus(int i){
	int j;
	for(j=0;pow2[i][j]!=0;j++) {
		f0[j]+=pow2[i][j];
		while(f0[j]>max){f0[j]-=mill;f0[j+1]++;}
	}
}

void ini(){
	pow2[0][0]=1;
	int i,j;
	for(i=1;i<=1000;i++){
		for(j=0;pow2[i-1][j]!=0;j++) pow2[i][j]=pow2[i-1][j]*2;	
		for(j=0;pow2[i][j]!=0;j++) while(pow2[i][j]>max){pow2[i][j]-=mill;pow2[i][j+1]++;}
	}
}
int main(){  
    int n,i;
	ini();
    while(cin>>n){  
		if(n==1) printf("0\n");  
        if(n==2) printf("1\n");  
        if(n==3) printf("1\n");  
        memset(f0,0,sizeof(f0));  
        if(n>3){  
			memset(f0,0,sizeof(f0));
            f0[0]=1;  
            if(n%2) for(i=2;i<=n-3;i+=2) bigplus(i);
            else for(i=1;i<=n-3;i+=2) bigplus(i);  
			for(i=99;i>=0;i--) if(f0[i]) break;
			printf("%d",f0[i]);
			for(i=i-1;i>=0;i--) printf("%06d",f0[i]);
			printf("\n");
        } 
    }  
    return 0;  
}  

1042  N!

#include<cstdio>
#include<memory>
using namespace std;
typedef struct {
	__int64 a[10000];
	int high;
}sobig,*sobigp;
#define max 999999
#define mill 1000000

sobigp cf(int n){
	int i,j;
	sobig *fre,*old,*t;
	fre=(sobig*)malloc(sizeof(sobig));
	old=(sobig*)malloc(sizeof(sobig));
	memset(fre,0,sizeof(sobig));
	memset(old,0,sizeof(sobig));
	fre->high=1;
	fre->a[1]=1;
	for(i=1;i<=n;i++){
		for(j=1;j<=fre->high;j++) old->a[j]=fre->a[j]*i;
		old->high=fre->high;
		for(j=1;j<=old->high;j++) if(old->a[j]>max){old->a[j+1]+=old->a[j]/mill;old->a[j]%=mill;if(j+1>old->high) old->high=j+1;}
		t=fre;
		fre=old;
		old=t;
	}
	return fre;
}

void main(){
	int n;
	int i;
	sobig *fac;
	while(scanf("%d",&n)!=EOF){
		fac=cf(n);
		printf("%d",fac->a[fac->high]);
		for(i=fac->high-1;i>0;i--) printf("%06d",fac->a[i]);
		printf("\n");
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值