- 博客(0)
- 资源 (3)
- 收藏
- 关注
Pongo挑战赛_Count
竟然挑战失败?!
自我感觉良好!哈哈。。。。。。
class Test {
public:
static long Count (int a,int b)
{
if(a>b) return 0;
int ic=0, ir=0;
int d, A, B, C; // A=B+d, B, C=B-d. 4d^2=N+(C-d)^2, (3d-C)(d+C)=N, B|N. d>=√N/2, C<=3*d. C=d±√(4*d^2-N).
for(int N=a; N<=b; N++){
ir=0;
for(int B=2; B<=N; B++){
if(N%B!=0) continue;
d=(N/B+B)/4;
A=B+d; C=B-d;
if(C<=0) continue;
if(A*A-B*B-C*C==N){ ir++; cout<<N<<":\t"<<A<<"\t"<<B<<"\t"<<C<<"\t"<<endl; }
} // for B
if(ir>1){ ic+=ir*(ir-1)/2; cout<<N<<":-------------------------"<<endl;}
cout<<endl;
} // for N
return ic;
}
};
2014-01-07
pongo_who挑战赛
int who(char * word){
int ire=0; // 递归层次, 即'*'的个数, +1. 甲赢,即(r+ire)%2=1, 其中r为who的返回值, ire为who中删除字符'*'标记个数.
char*p=word; while(*p){ if(*p=='*')ire++; p++;}
int ic=strlen(word)-ire;
if(ic<=1) return ire%2;
//printf("%d\t%d\t%s\n", ic,ire, word); // Sleep(100);
if( !word ){ printf("Invalid word! \n"); return ire%2; }
int ir=1; // 判断是否单增串
p=word; char*q;
while(*p){
while(*p=='*')p++; if(*p==0) break;
q=p+1; while(*q=='*')q++; if(*q==0) break;
if(*p>=*q) {ir=0; break; }
p++;
} // while(*r)
if(ir){ // 单增串, 偶层返回0, 奇层返回1
if(ire%2==1) printf("\n{%d}\t%s\n\n", ire, word); // 显示可行方案...
return ire%2;
} // if(ir)
// 删除一个字符, 然后判断是否单增串
int i, ip=0;
for(i=0; i<ic; i++){
char*p=word; ip=0; while(*p=='*') p++;
while(ip<i){ p++; while(*p=='*')p++; ip++; } ; // p指向word第i个有效字符, 简记为word[i].
char c=*p; *p='*'; // 记录word[i], 然后删除之
//ir=isOk(word); if(ir){ ir=(ire+1)%2; *p=c; break; }
ir=who(word); // 递归... 甲有赢的可能, 跳出for循环
if( (ir+ire)%2==1 ){ ir=(1+ire)%2; *p=c; break; }
ir=ire%2; // 标记, 这种情况下甲没有可能赢.
*p=c; // 恢复word[i]
} // for i
return ir;
} // who()
2014-01-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人