#include <stdio.h> int main(void) { int T=0,num=0; unsigned long long N=0,a=0,b=0; scanf("%d",&T); while(num<T) { scanf("%lld",&N); if(N==1||N==2) { printf("Case %d: no solution\n",++num); continue; } b=N-1; a=2*b; printf("Case %d: %lld %lld 1\n",++num,a,b); } return 0; }
#include <stdio.h> #include <math.h> #include <string.h> #define llong unsigned long long int zhishu(llong a,int *b) { llong i=0,j=0,k=0; //printf("a=%lld :",a); for(i=2,j=0;i<a;i++) { if(a%i==0) { *(b+j)=i; j++; k=1; //printf(" %lld ",i); } } //printf("\n"); if(k==0) return 0; else return 1; } int find(llong n,llong nf,int *step,int *a) { llong i,j,t; int b[100]; if(n==1) { (*step)++; *a=1; if((*step)<3) { (*step)--; return 0; } else return 1; } for(i=n+1;i<=2*n-2;i++) { if((nf!=0)&&(nf%i!=0)) continue; memset(b,0,100); if(zhishu(i,b)==0) continue; for(j=0;b[j]!=0;j++) { //printf("j=%d b[j]=%d\n",j,b[j]); t=i-b[j];//2 7 14 49 (*step)+=2; *a=i; *(a+1)=b[j]; if(find(n-t,b[j],step,a+2)==0) { (*step)-=2; continue;// } else return 1; } } return 0; } int main(void) { int T=0,num=0,i=0,step=0,a[100]={0}; llong N=0; scanf("%d",&T); //getchar(); while(num<T) { scanf("%lld",&N); step=0; if(find(N,0,&step,a)==0) printf("Case %d: no solution\n",++num); else { printf("Case %d:",++num); for(i=0;i<step;i++) printf(" %d",a[i]); printf("\n"); } } return 0; }
#include <stdio.h> #include <string.h> #define NUM 100 int main(void) { int T=0,nu=0; int i,L,n,k=0,flag=1,sum=0; char c; int alpa[1000][26],alpb[1000][26]; int num[NUM]={}; char ch[NUM]={}; scanf("%d",&T); c=getchar(); while(nu<T) { scanf("%d",&L);//L为字符串长度 c=getchar(); i=0; flag=1; while(flag) { c=getchar(); if(c==‘\n‘) { flag=0; break; } if((c>=‘0‘)&&(c<=‘9‘)) n=c-‘0‘; while(1) { c=getchar(); if((c>=‘0‘)&&(c<=‘9‘)) n=c-‘0‘+n*10; else break; } ch[i]=c; num[i++]=n; //printf("num[%d]=%d\t",i-1,num[i-1]); //printf(" ch[%d]=%c\n",i-1,ch[i-1]); } sum=0; for(i=0;num[i]!=0;i++) sum=sum+num[i]; n=sum/L; //printf("sum=%d\tn=%d\n",sum,n); k=0; for(i=0;num[i]!=0;i++) { if(i>=n*(k+1)) k++; alpa[k][ch[i]-‘a‘]=num[i]; } memset(num,0,NUM); memset(ch,0,NUM); c=getchar(); i=0; flag=1; while(flag) { c=getchar(); if(c==‘\n‘) { flag=0; break; } if((c>=‘0‘)&&(c<=‘9‘)) n=c-‘0‘; while(1) { c=getchar(); if((c>=‘0‘)&&(c<=‘9‘)) n=c-‘0‘+n*10; else break; } ch[i]=c; num[i++]=n; //printf("num[%d]=%d\t",i-1,num[i-1]); //printf(" ch[%d]=%c\n",i-1,ch[i-1]); } sum=0; for(i=1;num[i]!=0;i++) sum=sum+num[i]; n=sum/L; //printf("sum=%d\tn=%d\n",sum,n); k=0; for(i=0;num[i]!=0;i++) { if(i>=n*(k+1)) k++; alpb[k][ch[i]-‘a‘]=num[i]; } memset(num,0,NUM); memset(ch,0,NUM); n=sum/L; while((--n)&&flag) { for(i=0;i<26;i++) if(alpa[n][i]!=alpb[n][i]) { flag=0; break; } } if(flag==0) printf("Case %d: Yes\n",++nu); else printf("Case %d: No\n",++nu); } return 0; }
原文:http://blog.csdn.net/huaxi1902/article/details/24194551