zoukankan      html  css  js  c++  java
  • hdu1015

    嘿嘿,题目罗嗦了半天,其实意思很简单,就是给定一个目标值target,再给你一个备选字符串(5~12个字符),要你在这个字符串里选5个出来,满足题中给定的等式,并且你选择的这5个字符组成的字符串必须是所有可能情况中按字典序最大的情况。

          简单分析下就可以看出,就是一个组合问题,问题解的最大规模就是125,就是12*11*10*9*8*7,而最小规模是55,所以应该用枚举法就可以搞定。

    不过,枚举之前先排个序,就可以保证输出的是符合要求的最大的那个了

    #include<iostream>
    #include<string>
    using namespace std;
    int cmp(const void* a,const void* b)
    {
    	return *(int*)b-*(int*)a;
    }
    int main()
    {
    	int n,a[15],i,flag;
    	char s[15];
    	while(cin>>n>>s)
    	{
    		if(n==0&&!strcmp(s,"END"))
    			break;
    		for(i=0;s[i]!='\0';i++)
    			a[i]=s[i]-'A'+1;
    		qsort(a,i,sizeof(a[0]),cmp);
    		int len=i;
    		flag=0;
    		for(int i=0;i<len;i++)
    		{
    			for(int j=0;j<len;j++)
    			{
    				if(i==j)continue;
    				for(int k=0;k<len;k++)
    				{
    					if(k==i||k==j)continue;
    					for(int l=0;l<len;l++)
    					{
    						if(l==k||l==i||l==j)continue;
    					    for(int m=0;m<len;m++)
    						{
    							if(m==l||m==i||m==j||m==k)continue;
    							if(a[i]-a[j]*a[j]+a[k]*a[k]*a[k]-a[l]*a[l]*a[l]*a[l]+a[m]*a[m]*a[m]*a[m]*a[m]==n)
    							{
    									flag=1;
    									printf("%c%c%c%c%c\n",a[i]+'A'-1,a[j]+'A'-1,a[k]+'A'-1,a[l]+'A'-1,a[m]+'A'-1);
    									break;
    							}
    						}
    						if(flag)break;
    					}
    					if(flag)break;
    				}
    				if(flag)break;
    			}
    			if(flag)break;
    		}
    		if(!flag)
    			printf("no solution\n");
    	}
    	return 0;
    }
    
  • 相关阅读:
    python学习笔记1--datetime的使用
    python学习笔记2--子类父类继承时的参数传递
    python学习笔记1--错误,异常,调试
    JS同异步编程
    AMD /CMD
    i++ && ++i
    将url问号后面的参数变成对象
    字符串的常用方法
    函数 && 函数运行机制
    Math数学函数及常用方法
  • 原文地址:https://www.cnblogs.com/nanke/p/2124322.html
Copyright © 2011-2022 走看看