※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。



基本的にC言語で記述


問題1

#include<stdio.h>
int main(){
	int sum=0;
	int i;
	for(i=1;i<1000;i++){
		if(i%3 == 0 || i%5==0)sum+=i;
 	}
	printf("Ans=%d\n",sum);
} 

問題2

#include<stdio.h>
int main(){
	int prev=1,now=2,next=3;
	int sum=2,i;
	for(i=3;next<4000000;i++){
		if(next%2==0)sum+=next;
		prev=now;
		now=next;
		next+=prev;
	}
	printf("Ans=%d\n",sum);
	return 0;
}

問題3

VisualStudioでビルド
cygwinでは通らなかった(longlong 64bitが原因?)
#include<stdio.h>
int main(){
	long long a;
	a=600851475143;
	int ma=0,i;
	for(i=2;i*i<=a;i++){
		if(a%i==0){
			a/=i;
			if(ma<i)ma=i;
			i=1;
		}
	}
	if(ma<a){ma=a;}
	printf("Ans=%d\n",ma);
	return 0;
}

問題4

#include<stdio.h>
int check(int a){
	int keta=0,i;
	int b[8]={0,0,0,0,0,0,0,0};
	while(a>=1){
		b[keta++]=a%10;
		a/=10;
	}
	for(i=0;i<keta;i++){
		if(b[i]!=b[keta-1-i])return -1;
	}
	return 1;
}
int main(){
	int i,j,ma=0;
	for(i=999;i>99;i--){
		for(j=i;j>99;j--){
			if(check(i*j)==1 && ma<i*j ){
				ma=i*j;
				printf("%d×%d=%d\n",i,j,i*j);
			}
		}
	}
	printf("Ans=%d\n",ma);
	return 0;
}

問題5

#include<stdio.h>
int a[21];
int check(int b){
	int tmp[21];
	int i,j;
	for(i=0;i<21;i++)tmp[i]=0;
	for(i=2;i*i<=b;i++){
		if(b%i==0){
			b/=i;
			tmp[i]++;
			i=1;
		}
	}
	tmp[b]++;
	
	for(i=2;i<21;i++){
		if(tmp[i]>a[i])a[i]=tmp[i];
	}
	return;
}

int main(){
	int i,j,tmp,sum=1;
	for(i=0;i<21;i++)a[i]=0;
	for(i=2;i<21;i++){
		check(i);
	}
	
	for(i=2;i<21;i++){
		for(j=0,tmp=1;j<a[i];j++){
			tmp*=i;
		}
		sum*=(tmp);
	}
	printf("Ans=%d\n",sum);
	return 0;
}

問題6

#include<stdio.h>
int main(){
	int i;
	double re1=0,re2=0;
	for(i=1;i<=100;i++){
		re1+=i;
		re2+=i*i;
	}
	printf("%10.0f\n",re1*re1-re2);
	return 0;
}

問題7

/*まったく意味のない関数化w*/
#include<stdio.h>
#define SEARCH 10001
int sosu(int a){
	int i;
	for(i=2;i*i<=a;i++){
		if(a%i==0)return 0;
	}
	return 1;
}

int search_sosu(int a){
	int i,count=1;
	if(a==1)return 2;
	for(i=3;!(count==a);i+=2){
		if(sosu(i)==1)count++;
	}
	return i-2;
}

int main(){
	printf("Ans=%d\n",search_sosu(SEARCH));
	return 0;
}

問題8

#include<stdio.h>
int suti(char ch){
	int i;
	char a[10]={'0','1','2','3','4','5','6','7','8','9'};
	for(i=0;i<10;i++){
		if(a[i]==ch)return i;
	}
	return -1;
}
int main(){
	char c;
	int i,ma=1,now=1,a[6]={1,1,1,1,1,1},tmp;
	while(EOF!=scanf("%c ",&c)){
		a[5]=suti(c);
		for(i=1,now=1;i<6;i++){
			now*=a[i];
		}
		if(ma<now)ma=now;
		for(i=0;i<5;i++){
			tmp=a[i];
			a[i]=a[i+1];
			a[i+1]=tmp;
		}
	}
	printf("Ans=%d\n",ma);
	return 0;
}

問題9

#include<stdio.h>
int main(){
	int i,j,tmp;
	for(i=1;i<333;i++){
		for(j=i+1;j<500;j++){
			tmp=1000-i-j;
			if(tmp<=j)break;
			if(i*i+j*j==tmp*tmp)printf("%d",i*j*tmp);
		}
	}
	return 0;
}

問題10

#include<stdio.h>
int sosu(int a){
	int i;
	for(i=2;i*i<=a;i++){
		if(a%i==0)return -1;
	}
	return 0;
}
int main(){
	int i,j;
	long long sum=2;
	for(i=3;i<=2000000;i++){
		if(sosu(i)==0)sum+=i;
	}
	printf("SUM=%lld\n",sum);
	return 0;
}

問題11

#include<stdio.h>
int main(){
	int i,j,ma=1,now,a[20][20];
	for(i=0;i<20;i++){
		for(j=0;j<20;j++){
			scanf("%d ",&a[i][j]);
		}
	}
	for(i=0;i<20;i++){
		for(j=0;j<20;j++){
			if(j<=16){
				now=a[i][j]*a[i][j+1]*a[i][j+2]*a[i][j+3];
				if(ma<now)ma=now;
			}
			if(i<=16){
				now=a[i][j]*a[i+1][j]*a[i+2][j]*a[i+3][j];
				if(ma<now)ma=now;
			}
			if(i<=16 && j<=16){
				now=a[i][j]*a[i+1][j+1]*a[i+2][j+2]*a[i+3][j+3];
				if(ma<now)ma=now;
			}
			if(i<=16 && j>=3){
				now=a[i][j]*a[i+1][j-1]*a[i+2][j-2]*a[i+3][j-3];
				if(ma<now)ma=now;
			}
			if(i>=3 && j<=16){
				now=a[i][j]*a[i-1][j+1]*a[i-2][j+2]*a[i-3][j+3];
				if(ma<now)ma=now;
			}

		}
	}
	printf("Ans=%d\n",ma);
	return 0;
}

問題12

#include<stdio.h>
int check(int a){
	int re=2,i;
	for(i=2;i*i<=a;i++){
		if(a%i==0)re+=2;
		if(i*i==a)re-=1;
	}
	return re;
}
int main(){
	int i,now=0;
	for(i=1;;i++){
		now+=i;
		if(check(now)>=501){
			printf("Ans=%d\n",now);
			break;
		}
	}
	return 0;
}

問題13

#include<stdio.h>
int suti(char ch){
	char tmp[10]={'0','1','2','3','4','5','6','7','8','9'};
	int k;
	for(k=0;k<10;k++){
		if(tmp[k]==ch)return k;
	}
	return 0;
}

int main(){
	int a[60],i,j;
	char ch;
	for(i=0;i<60;i++)a[i]=0;
	for(i=0;i<100;i++){
		for(j=0;j<50;j++){
			scanf("%c ",&ch);
			//printf("%d",suti(ch));
			a[49-j]+=suti(ch);
		}
		//printf("\n");
	}
	
	for(i=0;i<59;i++){
		a[i+1]+=a[i]/10;
		a[i]%=10;
	}
	for(i=59;;i--){
		if(a[i]!=0){
			for(j=0;j<10;j++)printf("%d",a[i-j]);
			break;
		}
	}
	return 0;
}

問題14

#include<stdio.h>
int a[1000001];
int check(int t){
	long long tmp=t;
	//printf("%lld\n",tmp);
	int count=0;
	if(a[t]!=0)return a[t];
	do{
		if(tmp%2==0){
			tmp/=2;
		}else{
			tmp=tmp*3+1;
		}
		count++;
	}while(tmp>1000000);

	a[t]=check(tmp)+count;
	return a[t];
}
int main(){
	int i,ma=-1;
	int result=-1;
	for(i=1000000;i>1;i--){
		a[i]=0;
	}
	a[1]=1;

	for(i=1000000;i>1;i--){
		a[i]=check(i);
	}

	for(i=1000000;i>1;i--){
		if(ma<a[i]){
			ma=a[i];
			printf("%d %d\n",ma,i);
		}
	}
	return 0;
}

問題15

#include<stdio.h>
#define X 20
#define Y 20
int main(){
	int i,j;
	long long a[100][100];
	
	for(i=0;i<100;i++){
		for(j=0;j<100;j++)a[i][j]=0;
	}
 	a[0][0]=1;
	for(i=0;i<=Y;i++){
		for(j=0;j<=X;j++){
			if(j>0)a[i][j]+=a[i][j-1];
			if(i>0)a[i][j]+=a[i-1][j];
		}
	}
	printf("Ans=%lld\n",a[Y][X]);
	return 0;
}

問題16

#include<stdio.h>
#define KETA 500
int a[KETA];
void cal(int aa,int bb){
	int i,j,count=0,flag=0;
	int tmp=aa;
	for(i=0;i<KETA;i++)a[i]=0;
	while(tmp>=1){
		a[count++]=tmp%10;
		tmp/=10;
	}
	for(i=0;i<bb-1;i++){
		for(j=0;j<KETA;j++)a[j]*=aa;
		for(j=0;j<KETA-1;j++){
			a[j+1]+=a[j]/10;
			a[j]%=10;
		}
	}
//	for(i=KETA-1;i>=0;i--){
//		if(a[i]!=0)flag=1;
//		if(flag==1)printf("%d",a[i]);
//	}
}

int main(){
	int i,sum=0;
	cal(2,1000);
	for(i=0;i<KETA;i++)sum+=a[i];
	printf("Ans=%d\n",sum);
	return 0;
}

問題17

#include<stdio.h>
int moji_num(int in){
	int re=0;
	int a[20]={0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8};
	int b[10]={0,0,6,6,5,5,5,7,6,6};
	if(in%100 < 20)re+=a[in%100];
		else re+=a[in%10];
	re+=b[(in/10)%10];
	if(in>=100){
		re+=a[in/100];
		re+=7;
		if(in%100 != 0)re+=3;
	}
	if(in==1000)re++;
	return re;
}
	
int main(){
	int i,sum=0;
	for(i=1;i<=1000;i++){
		printf("%d =%d文字\n",i,moji_num(i));
		sum+=moji_num(i);
	}
	printf("%d\n",sum);
	return 0;
}

問題18

#include<stdio.h>
int main(){
	int a[2][200];
	int lim=1,ma=0,tmp;
	int i,j;
	for(i=0;i<2;i++){
		for(j=0;j<200;j++){
			a[i][j]=0;
		}
	}
	i=0;
	j=0;
	while(EOF !=scanf("%d",&tmp)){
		a[1][i++]=tmp;
		if(i<lim)continue;
		for(i=0;i<200;i++){
			if(i==0 || a[0][i-1]<a[0][i]){
				a[1][i]+=a[0][i];
		}else{
				a[1][i]+=a[0][i-1];
			}
		}
		for(i=0;i<200;i++){
			a[0][i]=a[1][i];
		}
		lim++;
		i=0;
	}
	for(i=0;i<200;i++){
		if(a[0][i]==0)break;
		if(ma<a[0][i]) ma=a[0][i];
	}
	printf("%d\n",ma);
	return 0;
}

問題19

#include<stdio.h>
int uruu(int year){
	if(year%4!=0 || (year%100==0 && year%400!=0))return 0;
	return 1;
}
int main(){
	int cl[12]={31,31,28,31,30,31,30,31,31,30,31,30};//12月・1月・…・11月
	int now=1,sum=0;
	int i,j;
	for(i=1900;i<2001;i++){
		for(j=1;j<=12;j++){
			if(i!=1900 && now%7==0)sum++;
			now+=cl[j%12];
			if(j==2)now+=uruu(i);
		}
	}
	printf("%d\n",sum);
	return 0;
}

問題20

#include<stdio.h>
int a[2][500];
void cal(int b){
	int i,j=0,k;
	for(i=0;i<500;i++)a[1][i]=0;
	while(b>=1){
		for(i=0;i<500;i++)a[1][i+j] += (a[0][i]*(b%10));
 		b/=10;
		j++;
	}
	for(i=0;i<499;i++){
		a[1][i+1]+=(a[1][i]/10);
		a[1][i] %= 10;
	}
	for(j=0;j<500;j++)a[0][j]=a[1][j];
}
int main(){
	int i,j,k,sum=0;
	for(i=0;i<2;i++){
		for(j=0;j<500;j++)a[i][j]=0;
	}
	a[0][0]=1;
	for(i=1;i<=100;i++){
		cal(i);
		printf("*%d=",i);
		for(k=499;a[0][k]==0;k--){};
		for(j=k;j>=0;j--)printf("%d",a[0][j]);
		printf("\n");
	}
	for(j=499;j>0;j--)sum+=a[0][j];
	printf("\n%d\n",sum);
	return 0;
}

問題21

#include<stdio.h>
int cal(int n){
	int i;
	int sum=1;
	for(i=2;i*i<=n;i++){
		if(n%i==0){
			sum+=i;
			if(i!=n/i)sum+=n/i;
		}
	}
	return sum;
}
	
int main(){
	int i,j;
	int sum=0;
	int a[10000];
	for(i=0;i<10000;i++)a[i]=0;
	
	for(i=1;i<10000;i++){
		if(i==cal(cal(i)) && i!=cal(i) ){
			a[i]=1;
			sum+=i;
			printf("%d %d %d\n",i,cal(i),cal(cal(i)));
		}
	}
	printf("%d\n",sum);
	return 0;
}

問題22

#include<stdio.h>
#include<string.h>
char ch[6000][20];
int main(){
	int i=0,j=0,k,sum=0,now;
	char tmp[20];
	char tmp2;
	while(EOF!=scanf("%c",&tmp2)){
		if(tmp2==','|| tmp2=='"'){
			if(j!=0){
				j=0;
				strcpy(&ch[i++][0],tmp);
			}
			continue;
		}
		tmp[j++]=tmp2;
		tmp[j]='\0';
	}
	
	for(j=i-1;j>0;j--){
		for(k=0;k<j;k++){
			if(strcmp(&ch[k][0],&ch[k+1][0])>0){
				strcpy(tmp,&ch[k][0]);
				strcpy(&ch[k][0],&ch[k+1][0]);
				strcpy(&ch[k+1][0],tmp);
			}
		}
	}
	for(j=0;j<i;j++){
		now=0;
		for(k=0;ch[j][k]!='\0';k++)	now+=ch[j][k]-64;
		sum+=(j+1)*now;
		printf("%d*%d=%d 合計%d %s\n",j+1,now,now*(j+1),sum,&ch[j][0]);
	}
	printf("%d\n",sum);
	return 0;
}

問題23

#include<stdio.h>
#define MAX_NUM 28124
int search(int n){
	int sum=1,i;
	for(i=2;i*i<=n;i++){
		if(n%i==0){
			sum+=i;
			if(i*i!=n)sum+=n/i;
		}
	}
	return (n<sum);
}
int main(){
	int a[2][MAX_NUM];
	int i,j;
	int sum=0;
	for(i=1;i<MAX_NUM;i++){
		a[1][i]=0;
		a[0][i]=search(i);
	}
	for(i=1;i<MAX_NUM;i++){
		if(a[0][i]==0)continue;
		for(j=i;i+j<MAX_NUM;j++){
			if(a[0][j]==0)continue;
			a[1][i+j]=1;
		}
	}
	for(i=0;i<MAX_NUM;i++){
		if(a[1][i]==0){
			sum+=i;
			printf("now=%d sum=%d\n",i,sum);
		}
	}
	printf("%d\n",sum);
	return 0;
}

問題24

#include<stdio.h>
int a[10];
int kaizyo(int n){
	if(n<=1)return 1;
	return n*kaizyo(n-1);
}
void search(int n,int size){
	if(size==0)return;
	int i,tmp=0;
	tmp= n / (kaizyo(size-1));
	for(i=0;;i++){
		if(a[i]==0)tmp--;
		if(tmp<0){
			a[i]=1;
			printf("%d ",i);
			break;
		}
	}
	search(n%kaizyo(size-1),size-1);
}
int main(){
	int i;
	for(i=0;i<10;i++)a[i]=0;
	scanf("%d",&i);
	search(i-1,10);
	return 0;
}

問題25

#include<stdio.h>
int main(){
	int a[1000],b[1000];
	int i,count=2,tmp;
	for(i=0;i<1000;i++){
		a[i]=0;
		b[i]=0;
	}
	a[0]=1;
	b[0]=1;
	while(b[999]==0){
		for(i=0;i<1000;i++){
			a[i]+=b[i];
			a[i+1]+=a[i]/10;
			a[i]%=10;
			tmp=a[i];
			a[i]=b[i];
			b[i]=tmp;
		}
		count++;
	}
	printf("%d\n",count);
	return 0;
}

問題26

#include<stdio.h>
int zyunkan(int n){
	int i,j;
	int now=1;
	int a[1000];
	for(j=0;j<1000;j++)a[j]=0;
	a[1]=1;
	
	for(i=2;;i++){
		now*=10;
		now%=n;
		if(now==0)return 0;
		if(a[now]!=0)return i-a[now];
		a[now]=i;
	}
	return -1;
}
int main(){
	int i,ma=0;
	int a[1000];
	for(i=2;i<1000;i++){
		if (ma<zyunkan(i)){
			 ma=zyunkan(i);
			 printf("d = %d のとき %d\n",i,ma);
		}
	}
	return 0;
}

問題27

#include<stdio.h>
int sosu(int n){
	if(n<=1)return 0;
	int i;
	for(i=2;i*i<=n;i++){
		if(n%i==0)return 0;
	}
	return 1;
}
int main(){
	int i,length=0;
	int a,b;
	for(a=-999;a<1000;a++){
		for(b=-999;b<1000;b++){
			i=0;
			while(sosu(i*i+a*i+b)==1){
				i++;
			}
			if(i>length){
				length=i;
				printf("Ans=%d %d\n",a*b,i);
			}
		}
	}
	return 0;
}

問題28

#include<stdio.h>
int main(){
	int i,sum=1;
	for(i=3;i<=1001;i+=2){
		sum+=(4*i*i-6*i+6);
	}
	printf("Ans=%d\n",sum);
	return 0;
}

問題29

/*無理やり解いた もうちょっとスマートなプログラムに書き直す予定*/
#include<stdio.h>
int tmp[100];
void soinsu(int a){
	int i;
	for(i=0;i<100;i++)tmp[i]=0;
	for(i=2;i*i<=a;i++){
		if(a%i==0){
			printf("%3d",i);
			tmp[i]++;
			a/=i;
			i=1;
		}
	}
	tmp[a]++;
	printf("%3d\n",a);
}
int main(){
	int *a=calloc(10000*100,sizeof(int));//[10000][100];
	int i,j,k,l,n=0,flag,sum=0;
	for(i=2;i<=100;i++){
		soinsu(i);
		for(j=2;j<=100;j++){
			k=0;
			for(k=0,flag=1;k<n;k++){
				flag=0;
				for(l=0;l<100;l++){
					if(a[k*100+l]!=tmp[l]*j)flag=1;
				}
				if(flag==0)break;
			}
			if(k==n){
				for(k=0;k<100;k++)a[n*100+k]=tmp[k]*j;
				n++;
				printf("%d^{%d}\n",i,j);
			}	
		}
	}
	printf("Ans=%d\n",n);
	return 0;
}

問題30

#include<stdio.h>
int main(){
	int a[10]={0,1,32,243,1024,3125,7776,16807,32768,59049};
	int i,j,k,sum=0;
	
	for(i=2;i<1000000;i++){
		k=0;
		j=i;
		while(j>=1){
			k+=a[j%10];
			j/=10;
		}
		//printf("%d %d\n",k,i);
		if(k==i){
			printf("%d\n",k);
			sum+=k;
		}
	}
	printf("Ans=%d\n",sum);
	return 0;
}

問題31

#include<stdio.h>
int coin[8]={1,2,5,10,20,50,100,200};
int search(int now,int n){
	int re=0,i;
	if(now==200)return 1;
	if(now>200)return 0;
	for(i=n;i<8;i++){
		re+=search(now+coin[i],i);
	}
	return re;
}
int main(){
	printf("Ans=%d\n",search(0,0));
	return 0;
}

問題32

#include<stdio.h>
int keta(int n){
	int re=0;
	for(re=1;(n/=10)>=1;re++);
	return re;
}
int check(int l,int r){
	int re=0,tmp,k;
	int a[10];
	for(k=0;k<10;k++)a[k]=0;
	for(tmp=l*r,a[tmp%10]++;tmp>=1;re++,tmp/=10,a[tmp%10]++);
	for(tmp=l,a[tmp%10]++;tmp>=1;re++,tmp/=10,a[tmp%10]++);
	for(tmp=r,a[tmp%10]++;tmp>=1;re++,tmp/=10,a[tmp%10]++);
	for(k=1;k<10;k++)if(a[k]!=1) return 0;
	return 1;
}
int main(){
	int i,j,k,l=0,Sum=0;
	int add[100];
	for(i=0;i<100;i++)add[i]=0;
	for(i=1;i<100;i++){
		for(j=i+1;keta(i)+keta(j)+keta(i*j)<=9;j++){
			//printf("i=%d j=%d i*j=%d keta=%d\n",i,j,i*j,keta(i)+keta(j)+keta(i*j));
			if(keta(i)+keta(j)+keta(i*j)==9 && check(i,j)){
				for(k=0;k<l;k++)
					if(add[k]==i*j)break;
				if(k==l){
					add[k]=i*j;
					printf("%d * %d = %d\n",i,j,i*j);
					Sum+=i*j;
					l++;
				}
			}
		}
	}
	
	printf("%d",Sum);
	return 0;
}

問題33

#include<stdio.h>
int main(){
	int i,j,k;
	int si=1,sj=1;
	for(i=11;i<100;i++){
		for(j=i-1;j>9;j--){
 			if((j/10)*i==(i%10)*j && i/10==j%10){
				printf("%d/%d\n",j,i);
				si*=i%10;
				sj*=j/10;
			}
		}
	}
	for(i=sj;i>0 && (si%i || sj%i);i--);
	printf("Ans=%d\n",si/i);
	return 0;
}

問題34

#include<stdio.h>
int kaizyo(int n){
	if(n<=1)return 1;
	return n*kaizyo(n-1);
}
int kaizyo2(int n){
	int re=0;
	do{
		re+=kaizyo(n%10);
		n/=10;
	}while(n);
	return re;
}
int main(){
	int i,sum=0;
	for(i=10;;i++){
		if(i==kaizyo2(i)){
			sum+=i;
			printf("%d sum=%d\n",i,sum);
		}
	}
	return 0;
}

問題35

#include<stdio.h>
int keta(int n){
	int re=1;
	while((n/=10)>=1)re++;
	return re;
}
int sosu(int n){
	int i;
	for(i=2;i*i<=n;i++){
		if(n%i==0)return 0;
	}
	return 1;
}
int reverse(int n){
	int re=0;
	do{
		re=re*10+n%10;
	}while((n/=10)>=1);
	return re;
}
int check(int n){
	int i,re=0,tmp,tmp2,tmp3;
	tmp=n;
	for(i=0;i<keta(n);i++){
		tmp3=keta(tmp);
		tmp2=tmp%10;
		tmp=reverse(tmp/10);
		tmp=reverse(tmp*10+tmp2);
		if(tmp3!=keta(tmp))return 0;
		if(sosu(tmp)==0)return 0;
	}
	return 1;
}
int main(){
	int i,tmp,tmp2,tmp3,sum=1;
	for(i=3;i<=1000000;i+=2){
		if(check(i)==1){
			printf("%d\n",i);
			sum++;
		}
	}
	printf("Ans=%d\n",sum);
	return 0;
}

問題36

#include<stdio.h>
int reverse(int n){
	int re=0;
	while(n>=1){
		re=re*10+n%10;
		n/=10;
	}
	return re;
}
int check(int n){
	int keta[32];
	int i,j;
	for(i=0;n!=0;i++){
		keta[i]=n%2;
		n/=2;
	}
	for(j=0;j<i;j++){
		if(keta[j]!=keta[i-j-1])return 0;
	}
	return 1;
}	
int main(){
	int i,sum=0;
	for(i=1;i<1000000;i++){
		if(i==reverse(i) && check(i)==1){
			sum+=i;
			printf("%d sum=%d\n",i,sum);
		}
	}
	return 0;
}

問題37

#include<stdio.h>
int sosu(int n){
	int i;
	if(n<=1)return 0;
	for(i=2;i*i<=n;i++){
		if(n%i==0)return 0;
	}
	return 1;
}
int reverse(int n){
	int re=0;
	while(n>=1){
		re=re*10+n%10;
		n/=10;
	}
	return re;
}
int check(int n){
	int tmp=n;
	while(tmp>=1){
		if(sosu(tmp)==0)return 0;
		tmp/=10;
	}
	tmp=n;
	while(tmp>=1){
		if(sosu(tmp)==0)return 0;
		tmp=reverse(reverse(tmp)/10);
	}
	return 1;
}
int main(){
	int i,sum=0;
	for(i=11;;i+=2){
		if(check(i)==1){
			sum+=i;
			printf("%d sum=%d\n",i,sum);
		}
	}
	return 0;
}

問題38

#include<stdio.h>
int keta(int n){
	int re=1;
	while((n/=10)>=1)re++;
	return re;
}
int check(int n,int j){
	int tmp,k,a[10];
	
	for(k=0;k<10;k++)a[k]=0;
	for(k=1;k<j;k++){
		tmp=n*k;
		while(tmp){
			a[tmp%10]++;
			tmp/=10;
		}
	}
	for(k=1;k<10;k++){
		if(a[k]!=1)return 0;
	}
	return 1;
}
int main(){
	int i,j,k,ke;
	for(i=1;;i++){
		ke=0;
		for(j=1;ke<9;j++){
			ke+=keta(i*j);
		}
		if(ke!=9)continue;
		if(check(i,j)==1){
			for(k=1;k<j;k++){
				printf("%d",i*k);
			}
			printf("\n");
		}
	}
	return 0;
}

問題39

#include<stdio.h>
int main(){
	int i,j,p,ma=0;
	int ans[1000];
	for(i=0;i<1000;i++)ans[i]=0;
	for(p=999;p>2;p--){
		for(i=1;i<=333;i++){
			for(j=i;j<=p-i-j;j++){
				if(i*i+j*j==(p-i-j)*(p-i-j)){
					printf("%d %d %d\n",i,j,p-i-j);
					ans[p]++;
				}
			}
		}
	}
	for(i=1;i<1000;i++){
		if(ans[i]>ma){
			ma=ans[i];
			printf("%d Ans=%d\n",ma,i);
		}
	}
	return 0;
}

問題40

#include<stdio.h>
int keta(int n){
	int re=1;
	while((n/=10)>=1)re++;
	return re;
}
int reverse(int n){
	int re=0;
	while(n>=1){
		re=re*10+n%10;
		n/=10;
	}
	return re;
}
int main(){
	int i,j=1,now,tmp,check=1,ke=0,Ans=1;
	for(i=1;;i++){
		ke=keta(i);
		tmp=reverse(i);
		while(ke-->0){
			now=tmp%10;
			tmp/=10;
			if(j==check){
				check*=10;
				Ans*=now;
				printf("Ans=%d now=%d\n",Ans,now);
				if(check>1000000)return 0;
			}
			j++;
		}
	}
	return 0;
}




| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
@wiki - 無料レンタルウィキサービス | プライバシーポリシー