`

一个小学弟问我的算法问题

阅读更多
  在实验室的本科群中,一个小弟问我一个算法问题。说有1,2,3,4,5构成的6位数,其中第3位不能为4,3和5不能连着,请把所有情况结果找出来。由于大四了,要做课程设计,由于在专业实验室里面没有eclipse,所以只好用C语言编写了(java的也差不多,所以都看得懂),没用多久时间,就是感觉时间效率不是很好。哪位大侠指点指点。


#include<stdio.h>
void main(){
	int i,j,k,l,m,n;
	int a,b,c,d,e,f;
	for(i=1;i<=5;i++){
		a=i;
		for(j=1;j<=5;j++){
			if((a==3&&j==5)||(a==5&&j==3)){
				continue;
			}
			b=j;
			for(k=1;k<=5;k++){
			   if((b==3&&k==5)||(b==5&&k==3)||k==4){
				continue;
			   }
		 	   c=k;
			   for(l=1;l<=5;l++){
				   if((c==3&&l==5)||(c==5&&l==3)){
				   continue;
				   }
		 	       d=l;
				   for(m=1;m<=5;m++){
					  if((d==3&&m==5)||(d==5&&m==3)){
				      continue;
					   }
		 	           e=m;
					   for(n=1;n<=5;n++){
						   if((e==3&&n==5)||(e==5&&n==3)){
				            continue;
						   }
		 	               f=n;
						   printf("%d%d%d%d%d%d\r\n",a,b,c,d,e,f);
					   }
				   }
			   }
			}
		}
	}
}

0
2
分享到:
评论
5 楼 raojl 2011-09-05  
这不是卖彩票嘛?
4 楼 zengzhaoshuai 2011-09-05  
* @author:     Hongze Zhao 
你的这个深度搜索很犀利,受教了,谢谢了
3 楼 randyzhao 2011-09-05  
刚才代码有个字写错了。
/**  
* Filename:    Number.java  
* Description:   
* Copyright:   Copyright (c)2011 
* Company:    company 
* @author:     Hongze Zhao 
* @version:    1.0  
* Create at:   Sep 5, 2011 1:28:01 AM  
*  
* Modification History:  
* Date         Author      Version     Description  
* ------------------------------------------------------------------  
* Sep 5, 2011    Hongze Zhao   1.0         1.0 Version  
*/
package testpackge;

/**Description:
 * @author Hongze Zhao
 * Create At : Sep 5, 2011 1:28:01 AM
 */
public class Number {
	private int[] num;//current number
	private int length;//the length of the number
	/**
	 * Use dfs to solve the problem
	 * @param pace current pacce
	 * @author Hongze Zhao	
	 */
	private void dfs(int pace){
		if (pace == this.length){
			//end, output
			for (int i = 0; i < this.length; i++){
				System.out.print(this.num[i]);
				
			}
			System.out.print("\n");
			return;
		}
		
		for (int i = 1; i <= 5; i++){
			if (pace == 2 && i == 4) {
				continue;
			}
			
			if (pace != 0 && i * this.num[pace - 1] == 15){
				continue;
			}
			
			this.num[pace] = i;
			this.dfs(pace + 1);
		}
	}
	public Number(int length){
		this.length = length;
		this.num = new int[length];
		this.dfs(0);
	}
	public static void main(String[] args){
		new Number(6);
	}
}
2 楼 randyzhao 2011-09-05  
Lz的代码怎么这么丑陋。用一个深搜就可以了。
/**  
* Filename:    Number.java  
* Description:   
* Copyright:   Copyright (c)2011 
* Company:    company 
* @author:     Hongze Zhao 
* @version:    1.0  
* Create at:   Sep 5, 2011 1:28:01 AM  
*  
* Modification History:  
* Date         Author      Version     Description  
* ------------------------------------------------------------------  
* Sep 5, 2011    Hongze Zhao   1.0         1.0 Version  
*/
package testpackge;

/**Description:
 * @author Hongze Zhao
 * Create At : Sep 5, 2011 1:28:01 AM
 */
public class Number {
	private int[] num;//current number
	private int length;//the length of the number
	/**
	 * Use dfs to solve the problem
	 * @param pace current pacce
	 * @author Hongze Zhao	
	 */
	private void dfs(int pace){
		if (pace == this.length){
			//end, output
			for (int i = 0; i < this.length; i++){
				System.out.print(this.num[i]);
				
			}
			System.out.print("\n");
			return;
		}
		
		for (int i = 1; i <= 5; i++){
			if (pace == 2 && i == 4) {
				continue;
			}
			
			if (pace != 0 && this.num[pace] * this.num[pace - 1] == 15){
				continue;
			}
			
			this.num[pace] = i;
			this.dfs(pace + 1);
		}
	}
	public Number(int length){
		this.length = length;
		this.num = new int[length];
		this.dfs(0);
	}
	public static void main(String[] args){
		new Number(6);
	}
}
1 楼 putersham 2011-09-04  
先不考虑3跟5连在一起的情况

那么应该有
5*5*4*5*5*5=12500
种情况

全部生产出来存入数组
应该这个量也不算很过分吧,才12500个值

如果超过6位的话那么就需要用数据库了
如果是超过10位的话已经几千万了 那么数据库估计也不好用了就 呵呵

接下来遍历数组,检查有没有35 或者53,有就从数组里移除

最后剩下的就是你要的了哦

相关推荐

    WOA鲸鱼优化算法及测试函数matlab

    总结来说,"WOA鲸鱼优化算法及测试函数matlab"是一个使用MATLAB实现的WOA算法包,包含用于测试和验证算法性能的各种测试函数。通过理解和应用这个算法,你可以解决各种优化问题,同时也可以对群智能算法有深入的理解...

    DOA野狗优化算法及测试函数matlab,2021年提出的一种新型智能优化算法

    野狗优化算法(DOA,Dingo Optimization Algorithm)是一种在2021年提出的新型智能优化算法,灵感来源于澳大利亚野狗的社会行为。这种算法旨在模拟野狗群体在寻找猎物时的协作和竞争机制,从而解决多模态、非线性、...

    GWO灰狼优化算法及测试函数matlab

    在MATLAB中实现GWO算法,你需要创建一个主函数来执行整个优化过程,并定义子函数来处理算法的核心步骤,如位置更新和适应度评估。此外,你还需要编写测试函数来评估优化结果。压缩包中的文件很可能是包含这些功能的...

    BOA蝴蝶优化算法及测试函数matlab

    MATLAB是数学计算和科学工程领域的强大工具,它提供了一个友好的编程环境,便于实现各种算法。在MATLAB中实现BOA算法,主要涉及以下几个步骤: 1. **初始化**:首先,需要设置算法的参数,如蝴蝶种群大小、最大迭代...

    SSA麻雀搜索算法及测试函数matlab

    这种行为启发了研究人员设计出一种用于解决复杂优化问题的算法。 MATLAB是一种广泛使用的数学计算软件,它提供了丰富的工具和环境,便于进行数值分析、矩阵运算、图像处理以及算法开发等任务。在这个SSA麻雀搜索...

    CPA食肉植物算法及测试函数matlab

    在算法中,每个个体代表一个潜在的解,它们通过类似于食肉植物捕食的动作不断接近最优解。这个过程包括捕获、消化和生长三个阶段,分别对应于搜索、更新和优化解的步骤。 **2. MATLAB实现** 在MATLAB中,可以通过...

    大津法Otsu单阈值分割matlab

    大津法(Otsu's method)是一种在图像处理领域广泛应用的自动阈值选择方法,尤其在二值化处理中非常关键。它基于数学统计原理,通过计算图像灰度直方图来寻找最佳的分割阈值,使得图像内部类间方差最大,从而达到...

    手写数字识别数据集.zip

    在计算机视觉中,手写数字识别是一个基础且重要的问题,它涉及到模式识别、神经网络以及图像处理等多方面的知识。 描述中提到“宽高是 32 像素 x 32 像素”,这表明每个手写数字的图像分辨率是32x32像素,这是一种...

    指针式仪表(纯表盘)数据集,大约410张图片,未标注,可用于识别读数、图像分割,或者扩充自己数据集

    指针式仪表(纯表盘)数据集是一个包含大约410张图片的资源,主要用于机器学习中的图像识别和图像分割任务。这个数据集对于那些正在研发或改进指针仪表读数识别算法的开发者和研究人员来说是极其有价值的。在深度...

    MATLAB建模与仿真实例程序.rar

    "MATLAB建模与仿真实例程序.rar" 是一个压缩包,其中包含了各种MATLAB建模和仿真的实例程序,特别强调了Simulink工具箱的使用。Simulink是MATLAB的一个扩展,主要用于动态系统的可视化建模和仿真。 1. **MATLAB建模...

Global site tag (gtag.js) - Google Analytics