HDU:1015 Safecracker哈哈,这样…
2012-12-05 17:06
417 查看
纯粹的暴力解决,用了五个for循环,本来没抱多大希望的,以为会有更好的算法来解决这个问题的,但是竟然能过,真是太出乎我的意料了,有点儿小激动!
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
这个题是完全的暴力解决,就是从字符串里面找到五个字符他的序号带入公式v - w^2 + x^3 - y^4 + z^5
等于前面的那个数,然后按照字典序输出最后面的那个就行了,拥护暴力!!!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int target(int a,int b,int c,int d,int e,int m)
{
if(a-b*b+c*c*c-d*d*d*d+e*e*e*e*e==m)
return 1;
else return 0;
}
int cmp(const void *a,const void *b)
{
return *(char *)a-*(char *)b;
}
int main()
{
int
i,m,a,b,c,d,e,num[100],flag;
char str[100],s[6];
while(scanf("%d
%s",&m,str),m!=0||strcmp(str,"END")!=0)
{
flag=0;
qsort(str,strlen(str),sizeof(str[0]),cmp);
for(i=0;str[i];i++)
num[i]=str[i]-'A'+1;
for(a=0;str[a];a++)
for(b=0;str[b];b++)
if(b==a)continue;
else
for(c=0;str[c];c++)
if(c==a||c==b)continue;
else
for(d=0;str[d];d++)
if(d==a||d==b||d==c)continue;
else
for(e=0;str[e];e++)
if(e==a||e==b||e==c||e==d)continue;
else
if(target(num[a],num[b],num[c],num[d],num[e],m))
{// printf("%c%c%c%c%c\n",str[a],str[b],str[c],str[d],str[e]);
s[0]=str[a];s[1]=str[b];s[2]=str[c];s[3]=str[d];s[4]=str[e];s[5]='\0';
flag=1;
}
if(flag==0)printf("no
solution\n");
else
puts(s);
}
return
0;
}
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
这个题是完全的暴力解决,就是从字符串里面找到五个字符他的序号带入公式v - w^2 + x^3 - y^4 + z^5
等于前面的那个数,然后按照字典序输出最后面的那个就行了,拥护暴力!!!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int target(int a,int b,int c,int d,int e,int m)
{
if(a-b*b+c*c*c-d*d*d*d+e*e*e*e*e==m)
return 1;
else return 0;
}
int cmp(const void *a,const void *b)
{
return *(char *)a-*(char *)b;
}
int main()
{
int
i,m,a,b,c,d,e,num[100],flag;
char str[100],s[6];
while(scanf("%d
%s",&m,str),m!=0||strcmp(str,"END")!=0)
{
flag=0;
qsort(str,strlen(str),sizeof(str[0]),cmp);
for(i=0;str[i];i++)
num[i]=str[i]-'A'+1;
for(a=0;str[a];a++)
for(b=0;str[b];b++)
if(b==a)continue;
else
for(c=0;str[c];c++)
if(c==a||c==b)continue;
else
for(d=0;str[d];d++)
if(d==a||d==b||d==c)continue;
else
for(e=0;str[e];e++)
if(e==a||e==b||e==c||e==d)continue;
else
if(target(num[a],num[b],num[c],num[d],num[e],m))
{// printf("%c%c%c%c%c\n",str[a],str[b],str[c],str[d],str[e]);
s[0]=str[a];s[1]=str[b];s[2]=str[c];s[3]=str[d];s[4]=str[e];s[5]='\0';
flag=1;
}
if(flag==0)printf("no
solution\n");
else
puts(s);
}
return
0;
}
相关文章推荐
- HDOJ&nbsp;1015&nbsp;&nbsp;&nbsp;Safecracker
- HDU:1250 Hat's Fibonacci 这样…
- hdu 1427 速算24点
- (hdu)1710 Binary Tre…
- hdu - 1010 Tempter of the Bone (dfs+奇偶性剪枝) && hdu-1015 Safecracker(简单搜索)
- HDU 4277 USACO ORZ
- ACM: 二分图最大匹配 hdu 2063
- HDU:2031 进制转换问题
- HDU: 1181 变形课 解题报告
- HDU 2578 Dating with girls(1)
- HDU 1058 Humble Numbers
- HDU 1405 The Last Practice
- HDU 2112 HDU Today
- HDU 2153 仙人球的残影
- HDU 1985 Conversions
- HDU 1335 Basically Speaking
- hdu Rightmost Digit&&Leftmost Di…
- hdu 迷瘴
- hdu 1434 幸福列车
- 更新节点区间最值&nbsp;HDU-1754&nbsp;I&nbsp;Hate…