HDU 1015 Safecracker

来源:互联网 发布:矩阵控制系统 编辑:程序博客网 时间:2024/06/05 17:35

题目地址:点击打开链接

思路:本来挺简单的,结果犯了一个大错误,把错误代码也贴上来,要求按字典序最大,只要刚开始从大到小排序就行 ,还有就是明白了老师为啥告诉我们要好好学英语,这样就能用英语定义变量了,不只用a,b,c,d,cf,lol,这些破词来定义了,代码把cf敲成c,结果害的我调了2个小时,每个代码都是一部血泪史啊

错误代码1:

#include<stdio.h>#include<stdlib.h>#include<string.h>int a,n,flag;int visit[30];char b[30];int c[30],cf[6];int cmp(const void *_x,const void *_y){int *x = (int*)_x;int *y = (int*)_y;return *y - *x;}void dfs(int cur){    int i;    if(flag)        return;if(cur == 5 && (cf[0] - cf[1]*cf[1] + cf[2]*cf[2]*cf[2] - cf[3]*cf[3]*cf[3]*cf[3] + cf[4]*cf[4]*cf[4]*cf[4]*cf[4] == a)){flag = 1;for(i=0; i<5; i++){printf("%c",cf[i] + 'A' -1);}printf("\n");return;}for(i=0; i<n; i++){if(visit[i] == 0){visit[i] = 1;cf[cur] = c[i];dfs(cur + 1);visit[i] = 0;}}}int main(){    int i;while(scanf("%d %s",&a,b)){flag = 0;if(a == 0 && strcmp(b,"END") == 0)break;n = strlen(b);memset(visit,0,sizeof(visit));for(i=0; i<n; i++)        {            c[i] = b[i] - 'A' + 1;        }        qsort(c,n,sizeof(int),cmp);dfs(0);if(flag == 0)printf("no solution\n");}return 0;}
手贱把判断条件也加入if语句,害的cur=5还往下执行

AC代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>int a,n,flag;int visit[30];char b[30];int c[30],cf[6];int cmp(const void *_x,const void *_y){int *x = (int*)_x;int *y = (int*)_y;return *y - *x;}void dfs(int cur){    int i;    if(flag)        return;if(cur == 5){if(cf[0] - cf[1]*cf[1] + cf[2]*cf[2]*cf[2] - cf[3]*cf[3]*cf[3]*cf[3] + cf[4]*cf[4]*cf[4]*cf[4]*cf[4] == a)//就是这把cf写成c{flag = 1;for(i=0; i<5; i++){printf("%c",cf[i] + 'A' - 1);//注意减1}printf("\n");}return;}for(i=0; i<n; i++){if(visit[i] == 0){visit[i] = 1;cf[cur] = c[i];dfs(cur + 1);visit[i] = 0;}}}int main(){    int i;while(scanf("%d%s",&a,b))//这里空不空都不影响结果{if(a == 0 && strcmp(b,"END") == 0)break;flag = 0;n = strlen(b);memset(visit,0,sizeof(visit));for(i=0; i<n; i++)        {            c[i] = b[i] - 'A' + 1;//注意加1        }        qsort(c,n,sizeof(int),cmp);dfs(0);if(flag == 0)printf("no solution\n");}return 0;}

AC代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>char a[15];int cmp(const void *_a,const void *_b){return *(char*)_b - *(char*)_a;//记得前面还要再加一个*}int main(){int target,i,j,k,l,m,n,flag;int x1,x2,x3,x4,x5;while(scanf("%d %s",&target,a)){flag = 0;if(target == 0 && strcmp(a,"END") == 0)break;n = strlen(a);qsort(a,n,sizeof(a[0]),cmp);for(i=0; i<n; i++){for(j=0; j<n; j++){if(j == i)continue;for(k=0; k<n; k++){if(k == i || k == j)continue;for(l=0; l<n; l++){if(l == i || l == j || l == k)continue;for(m=0; m<n; m++){if(m == i || m == j || m == k || m == l)continue;x1 = a[i] - 64;x2 = a[j] - 64;x3 = a[k] - 64;x4 = a[l] - 64;x5 = a[m] - 64;if(x1 - x2*x2 + x3*x3*x3 - x4*x4*x4*x4 + x5*x5*x5*x5*x5 == target){flag =1;printf("%c%c%c%c%c\n",a[i],a[j],a[k],a[l],a[m]);goto loop;}}}}}}loop:if(!flag) printf("no solution\n");}return 0;}


0 0