编程实现:两个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++都可.
...全文
182 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
  • 打赏
  • 举报
回复
我觉得楼主已经实现的比原来的这样要难一点啊,难的都有了,简单的还不会么
内容概要:本文针对光伏发电并网过程中的电能质量问题,特别是总谐波失真(THD)超标难题,提出了一种基于级联前馈神经网络(CFNN)与深度神经网络(DNN)协同控制的级联多电平逆变器智能控制方案。研究构建了逆变器的拓扑模型,分析了其工作原理与谐波产生机制,设计了由感知层、控制层和执行层组成的三层控制架构。其中,CFNN控制器负责快速响应光伏出力波动,输出初步开关状态指令以抑制低次谐波;DNN控制器则对初级指令进行精细化校正,进一步抑制高次谐波。该方案摆脱了对精确系统学模型的依赖,通过机器学习算法实现对复杂工况的自适应控制。仿真结果表明,该协同控制方案能将电流总谐波失真有效控制在3.8%以内,功率因提升至0.99,响应时间缩短至0.05秒,显著优于传统PI控制和单一神经网络控制方案,有效提升了光伏并网的电能质量和系统稳定性。; 适合人群:从事电力电子、新能源并网、智能控制算法研究的高校研究生、科研院所研究人员及电力系统自动化领域的工程技术人员。; 使用场景及目标:① 解决光伏等新能源并网时因出力波动和电网扰动导致的电能质量问题;② 为需要高精度、快响应控制的电力电子变换器提供一种基于深度学习的先进控制策略设计思路;③ 推动人工智能算法在电力系统控制领域的应用与创新。; 阅读建议:读者在学习时应重点关注CFNN与DNN的协同工作机制、网络结构设计及输入输出参的选取逻辑,并结合文中提供的Matlab/Simulink仿真模型,动手复现和调试,深入理解机器学习算法如何替代传统控制理论解决实际工程问题。
内容概要:本文针对微电网日前经济调度问题,提出了一种结合风力发电、光伏发电、储能系统与需求响应的综合优化模型,并通过Python代码实现了该模型的求解。模型充分考虑了可再生能源出力的间歇性与波动性,利用储能系统进行能量时移,并通过需求响应机制引导用户调整用电行为,以实现微电网运行成本的最小化与能源利用效率的最大化。研究涵盖了系统建模、约束条件设定、目标函构建及求解算法实现等全过程,为微电网的能量管理提供了科学的决策支持。; 适合人群:具备一定电力系统基础知识和Python编程能力,从事新能源、微电网、电力系统优化等相关领域研究的研发人员、高校研究生及工程技术人员。; 使用场景及目标:① 学习和掌握微电网日前经济调度的基本原理与建模方法;② 理解风光储联合系统与需求响应协同优化的实现机制;③ 通过阅读和运行Python代码,复现并改进相关优化模型,服务于学术研究或工程项目。; 阅读建议:建议读者结合代码与理论模型进行对照学习,重点关注目标函的设计、各类约束(如功率平衡、储能充放电、需求响应潜力)的学表达,以及优化求解器的调用方法。鼓励修改参、增删设备模型以进行案例拓展,深化对微电网优化调度的理解。

51,410

社区成员

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

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