标题:求大佬看看错在哪里了,测试结果都正确,但提交为wrong answer,求指导
只看楼主
艾莉莎
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-2-23
结帖率:0
已结贴  问题点数:20 回复次数:4 
求大佬看看错在哪里了,测试结果都正确,但提交为wrong answer,求指导
题目:要找到组合,您必须选择满足以下等式的五个字母v,w,x,y和z,其中每个字母由其在字母表中的序号位置替换(A = 1,B = 2,... ,Z = 26)。然后组合是vwxyz。如果有多个解决方案,则该组合是按字典顺序最大的组合,即在字典中最后出现的组合。

v - w ^ 2 + x ^ 3 - y ^ 4 + z ^ 5 =目标  

“例如,给定目标1和字母集合ABCDEFGHIJKL,一种可能的解决方案是FIECB,因为6 - 9 ^ 2 + 5 ^ 3 - 3 ^ 4 + 2 ^ 5 = 1.在这种情况下实际上有几种解决方案,并且组合结果证明是LKEBA.Klein认为在雕刻中编码组合是安全的,因为它可能需要数月的努力来尝试所有即使你知道这个秘密也是可能的。当然,计算机当然不存在。“
样本输入:
1 ABCDEFGHIJKL
11700519 ZAYEXIWOVU
3072997 SOUGHT
1234567 THEQUICKFROG
0结束
样本输出:
LKEBA
YOXUZ
GHOST
no solution

代码
#include<stdio.h>
#include<string.h>
#include<math.h>
#define EPSILON 0.1
int main()
{
    double num1;
    int flag,v,w,x,y,z,len;
    char a[20]= {0};
    double b[20]= {0};
    for(int i=0; i<20; i++)
    {
        a[i]=0;
    }
    while(scanf("%lf %s",&num1,a)!=EOF)
    {
        if(num1==0&&strcmp(a,"END")==0)
        {
            break;
        }
        flag=0;
        //把字符型数据组转换成数字型
        for(int i=0; i<20; i++)
        {
            b[i]=a[i];

        }
        len=strlen(a);
        for(int j=0; j<len; j++)
        {
            b[j]=b[j]-64;

        }
        for(v=len-1; v>=0; v--)
        {
            for(w=len-1; w>=0; w--)
            {

                for(x=len-1; x>=0; x--)
                {

                    for(y=len-1; y>=0; y--)
                    {

                        for(z=len-1; z>=0; z--)
                        {
                            if(w!=v&&x!=v&&x!=w&&y!=v&&y!=w&&y!=x&&z!=v&&z!=w&&z!=x&&z!=y)
                            {

                                //num2=b[v]-pow(b[w],2)+pow(b[x],3)-pow(b[y],4)+pow(b[z],5);
                                if(fabs(num1-(b[v]-pow(b[w],2)+pow(b[x],3)-pow(b[y],4)+pow(b[z],5)))<EPSILON)
                                {
                                    printf("%c%c%c%c%c\r\n",a[v],a[w],a[x],a[y],a[z]);
                                    flag=1;
                                    v=w=x=y=z=-1;
                                }


                            }
                        }
                    }
                }
            }
        }

        if(flag==0)
        {
            printf("no solution\r\n");
        }

    }

    return 0;

}

搜索更多相关主题的帖子: 组合 字母 int for pow 
2019-02-24 16:46
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
得分:7 
校内AC就很烦各种要求
2019-02-25 08:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
http://acm.hdu.

要贴题目
不应该用浮点数运算
题目要求“If there is more than one solution then the combination is the one that is lexicographically greatest”,是“字典顺序”,不是“输入顺序”
你的代码会将所有符合条件的组合都输出来,而题目要求只输出字典序最大的那个
……(没仔细看,错误一箩筐)……
2019-02-25 09:40
艾莉莎
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-2-23
得分:0 
回复 3楼 rjsp
谢谢
2019-02-25 15:55
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:7 
最大值24-2*2+25*25*25-1+26^5   最小值 3-25*25+2*2*2-26^+1 都在int的取值范围,所以应该使用int 类型
字母表26个,每个有5种取值,先计算这些值存于26*5的二维数组,程序运行时直接查表
把 给出的字母排序,从大向小找,找到即退出
下面代码可以参考
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int arrAll[26][5];
    int number;
    int i   ;
    
    
    char str[30] ;
    int find(int,char*,int arrAll[26][5]);
    for( i=0;i<26;++i)
    {
        arrAll[i][0] =i+1;
        arrAll[i][1] =-(i+1)*(i+1);
        arrAll[i][2] =(i+1)*(i+1)*(i+1);
        arrAll[i][3] =-(i+1)*(i+1)*(i+1)*(i+1);
        arrAll[i][4] =(i+1)*(i+1)*(i+1)*(i+1)*(i+1);
    }
    
    
    i=0;
for(;;)
{

 scanf("%d%s",&number,str);
if(number==0 && strstr(str,"END")) return 0;

find(number,str,arrAll);
++i;

}

return 0;
}

int find(int number,char* strCH ,int arrAll[26][5])
{    
   int k0,k1,k2,k3,k4; 
    int i  ,  j  , len,Tflg ;    
    char str[26];
    len=strlen(strCH);
    j=0;
for( i=25;i>=0;--i)
{
   if(strchr(strCH,i+'A'))str[ j++]=i;
}


    for(k0=0;k0<len;++k0)
    {
    
          Tflg=1<<str[k0]; 
          
         for(k1=0;k1<len;++k1)
         {
                
                if((Tflg>>str[k1])&1)continue;
                
                  Tflg |=1<<str[k1];

 
                 for(k2=0;k2<len;++k2)
                 {
                       
                       if((Tflg>>str[k2])&1)continue;
                                                  
                        Tflg |=1<<str[k2];
                       for(k3=0;k3<len;++k3)
                       {
                             
                            if((Tflg>>str[k3])&1)continue;
                
                              Tflg |=1<<str[k3];

                              for(k4=0;k4<len;++k4)
                    
                                 {
                                   
                                    if((Tflg>>str[k4])&1)continue;

                                     if(arrAll[str[k0]][0]+arrAll[str[k1]][1]+arrAll[str[k2]][2]+arrAll[str[k3]][3]+arrAll[str[k4]][4]==number)
                                     {
                                   
                            
                                        printf("%c%c%c%c%c",str[k0]+'A',str[k1]+'A',str[k2]+'A',str[k3]+'A',str[k4]+'A'); 
                                         printf("\n");
                                           return 0;                                                                                                                                                               
                                     }
                                 
                              }
                             
                              Tflg ^=1<<(str[k3]);
                        } 

                      
                        Tflg ^=1<<(str[k2]);
                }
               
                Tflg ^=1<<(str[k1]);
          }
        
    }


 printf("no solution\n");

    return 0;
}

2019-02-28 19:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493200-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.244157 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved