编程实现:两个1,两个2....两个7,两个1之间有一个其他数,两个2之间有2个其他数...两个7之间有7个其他数。

cyl654809 2014-12-09 03:48:36
编程实现:两个1,两个2....两个7,两个1之间有一个其他数,两个2之间有2个其他数...两个7之间有7个其他数。
当时自己写的时候理解错误了,理解成两个1之间至少有一个其他数,两个2之间至少有2个其他数....这种了,这种我实现了。
但不符合要求。求大神编程实现.
JAVA \C\C++都可.
...全文
155 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
冥王之锤 2014-12-10
  • 打赏
  • 举报
回复
引用 6 楼 t_jl1979 的回复:
如果是以74开头的,那么这个数不存在。 楼主是否记错了?
昨天算错了,今天补一下,7,4位置已知,很快就可以算出来:
package test;

import java.util.ArrayList;
import java.util.List;

public class AllSort {
	public static void main(String[] args) {
		char buf[] = { '7', '4', '1', '1', '2', '2', '4', '3', '7', '5', '5', '6', '6', '3' };

		perm(buf, 2, buf.length - 1);
	}

	/**
	 * @param buf
	 * @param start
	 * @param end
	 */
	public static void perm(char[] buf, int start, int end) {
		if (start == end) {// 当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可
			checkNum(buf, end);
		} else {// 多个字母全排列
			for (int i = start; i <= end; i++) {
				char temp = buf[start];// 交换数组第一个元素与后续的元素
				buf[start] = buf[i];
				buf[i] = temp;

				perm(buf, start + 1, end);// 后续元素递归全排列

				temp = buf[start];// 将交换后的数组还原
				buf[start] = buf[i];
				buf[i] = temp;
			}
		}
	}

	private static void checkNum(char[] buf, int end) {
		boolean flag = true;
		List<Character> tmpList = new ArrayList<>();
		for (int i = 0; i <= end; i++) {
			char tmp = buf[i];
			if (tmpList.contains(tmp)) {
				continue;
			}
			tmpList.add(tmp);
			int nextIndex = i + Integer.valueOf(tmp + "") + 1;
			if (nextIndex > end || buf[nextIndex] != tmp) {
				flag = false;
			}
		}
		if (flag) {
			System.out.println(buf);
		}
	}
}
结果是: 74151643752362
冥王之锤 2014-12-09
  • 打赏
  • 举报
回复
如果是以74开头的,那么这个数不存在。 楼主是否记错了?
cyl654809 2014-12-09
  • 打赏
  • 举报
回复
引用 4 楼 l359122505 的回复:
参考下这个代码:

class C {
    static void findSo(int[] a, int n) {
        for (int i = 0; i < 14; i++) {
            if (i + n + 1 < 14 && a[i] == 0 && a[i + n + 1] == 0) {
                a[i] = n;
                a[i + n + 1] = n;

                if (n == 7) {
                    for (int j = 0; j < 14; j++) {
                        System.out.print(a[j]);
                    }
                    System.out.print("\n");
                } else {
                    findSo(a, n + 1);
                }
                a[i] = 0;
                a[i + n + 1] = 0;
            }
        }
    }

    public static void main(String[] args) {
        int[] a = new int[14];
        findSo(a, 1);
    }
}
正解. 这样的方法我发帖子前试过.但是跑起来结果有误,可能是我判断的时候弄错了,同学要拆电脑就没调试。 谢谢啦,来者有分。
繁华终归落尽 2014-12-09
  • 打赏
  • 举报
回复
参考下这个代码:

class C {
    static void findSo(int[] a, int n) {
        for (int i = 0; i < 14; i++) {
            if (i + n + 1 < 14 && a[i] == 0 && a[i + n + 1] == 0) {
                a[i] = n;
                a[i + n + 1] = n;

                if (n == 7) {
                    for (int j = 0; j < 14; j++) {
                        System.out.print(a[j]);
                    }
                    System.out.print("\n");
                } else {
                    findSo(a, n + 1);
                }
                a[i] = 0;
                a[i + n + 1] = 0;
            }
        }
    }

    public static void main(String[] args) {
        int[] a = new int[14];
        findSo(a, 1);
    }
}
cyl654809 2014-12-09
  • 打赏
  • 举报
回复
引用 1 楼 u012171905 的回复:
我觉得楼主已经实现的比原来的这样要难一点啊,难的都有了,简单的还不会么
这道题是当时考试时候现场编的,现在没思路阿。看看有没有高手请教一下。 下面是我当时写的代码:

import java.util.Scanner;

/**
 * 
 * @author Cyl-29
 *
 */

/**
 * 7对数(1-7),组成一个14位的数.
 * 要求两个1之间有1个其他数字,
 * 两个2之间有2个其他数字……
 * 两个7之间有7个其他数字。
 * 
 * 例子:忘记了 * 
 * 编程找出74开头的这14位数.
 */



public class Qi {
	
	static int num[] = new int[15];
	static int vis[] = new int[8];
	
	static void print(){
		for(int i=1; i<15; i++){
			System.out.print(num[i]);
		}
		System.out.println();
		//暂停.
		Scanner cin = new Scanner(System.in);
		cin.nextLine();
	}
	
	static void dfs(int begin,int n){
		if(begin == n){
			print();
		}else{
			for(int i=7; i>0; i--){
				
				//短路加快程序运行.
				if(i==7 && begin<9)
					continue;
				
				if(i==4 && begin<7)
					continue;
	
				int min = begin-i>0?begin-i:0;
				boolean flag = true;
				if(i>=3 && i<=6){
					for(int j=begin-1; j>min; j--){
						if(i==num[j])
							flag = false;//
					}
				}
				
				if(i==1 && num[begin-1]==1)
					continue;
				if(i==2 && (num[begin-1] == 2 || num[begin-2] == 2) )
					continue;
			
				if(flag && vis[i]<2){
					vis[i]++;
					num[begin] = i;
					dfs(begin+1,n);
					vis[i]--;
				}
			}
		}
	}
	public static void main(String []args){
		//74开头.
		num[1] = 7; num[2] = 4;
		//74各使用一次.
		vis[7] = 1; vis[4] = 1;
		
		dfs(3,15);
	}
}
wyc_ 2014-12-09
  • 打赏
  • 举报
回复
同意楼上
Coder_D 2014-12-09
  • 打赏
  • 举报
回复
我觉得楼主已经实现的比原来的这样要难一点啊,难的都有了,简单的还不会么
【轴承故障诊断】加权多尺度字典学习模型(WMSDL)及其在轴承故障诊断上的应用(Matlab代码实现)内容概要:本文介绍了加权多尺度字典学习模型(WMSDL)在轴承故障诊断中的应用,并提供了基于Matlab的代码实现。该模型结合多尺度分析与字典学习技术,能够有效提取轴承振动信号中的故障特征,提升故障识别精度。文档重点阐述了WMSDL模型的理论基础、算法流程及其在实际故障诊断中的实施步骤,展示了其相较于传统方法在特征表达能力和诊断准确性方面的优势。同时,文中还提及该资源属于一个涵盖多个科研方向的技术合集,包括智能优化算法、机器学习、信号处理、电力系统等多个领域的Matlab仿真案例。; 适合人群:具备一定信号处理和机器学习基础,从事机械故障诊断、工业自动化、智能制造等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习并掌握加权多尺度字典学习模型的基本原理与实现方法;②将其应用于旋转机械的轴承故障特征提取与智能诊断;③结合实际工程据复现算法,提升故障诊断系统的准确性和鲁棒性。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注字典学习的训练过程与多尺度分解的实现细节,同时可参考文中提到的其他相关技术(如VMD、CNN、BILSTM等)进行对比实验与算法优化。
【负荷预测、电价预测】基于神经网络的负荷预测和价格预测(Matlab代码实现)内容概要:本文档介绍了基于神经网络的电力系统负荷预测与电价预测方法,并提供了完整的Matlab代码实现方案。文中详细阐述了如何利用神经网络模型对电力负荷和市场价格进行建模与预测,涵盖据预处理、模型构建、训练优化及结果分析等关键步骤。该方法适用于处理非线性、时变性强的电力系统据,能够有效提升预测精度,为电网调度、能源管理和市场运营提供决策支持。此外,文档还展示了多个相关研究方向和技术应用案例,突出神经网络在智能电网领域的广泛适用性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事能源预测、智能电网相关工作的工程技术人员。; 使用场景及目标:①应用于电力系统短期/中期负荷与电价预测任务;②作为科研项目或毕业论文的技术参考,复现并改进预测模型;③结合实际据开展预测算法优化研究,提升预测准确性与鲁棒性。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注神经网络结构设计、参调优与预测性能评估部分,同时可参考文档中列出的其他AI技术应用案例拓展研究思路。
【硕士论文复现】可再生能源发电与电动汽车的协同调度策略研究(Matlab代码实现)内容概要:本文档围绕“可再生能源发电与电动汽车的协同调度策略研究”展开,旨在通过Matlab代码复现硕士论文中的核心模型与算法,探讨可再生能源(如风电、光伏)与大规模电动汽车接入电网后的协同优化调度方法。研究重点包括考虑需求侧响应的多时间尺度调度、电动汽车集群有序充电优化、源荷不确定性建模及鲁棒优化方法的应用。文中提供了完整的Matlab实现代码与仿真模型,涵盖从场景生成、学建模到求解算法(如NSGA-III、粒子群优化、ADMM等)的全过程,帮助读者深入理解微电网与智能电网中的能量管理机制。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、智能电网、电动汽车等领域技术研发的工程人员。; 使用场景及目标:①用于复现和验证硕士论文中的协同调度模型;②支撑科研工作中关于可再生能源消纳、电动汽车V2G调度、需求响应机制等课题的算法开发与仿真验证;③作为教学案例辅助讲授能源互联网中的优化调度理论与实践。; 阅读建议:建议结合文档提供的网盘资源下载完整代码,按照目录顺序逐步学习各模块实现,重点关注模型构建逻辑与优化算法的Matlab实现细节,并通过修改参进行仿真实验以加深理解。

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧