很具挑战性的一组数字循环输出问题

chen376663811 2010-03-26 04:47:16
有一组8位数的数字,其中的数字在3-8之间,就是说这组数字只包括(3、4、5、6、7、8);怎么循环输出它产生的所有数组。
...全文
358 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
KingWolfOfSky 2010-03-30
  • 打赏
  • 举报
回复

public static void main(String args[]) {
for (int i1 = 3; i1 < 9; i1++) {
for (int i2 = 3; i2 < 9; i2++) {
for (int i3 = 3; i3 < 9; i3++) {
for (int i4 = 3; i4 < 9; i4++) {
for (int i5 = 3; i5 < 9; i5++) {
for (int i6 = 3; i6 < 9; i6++) {
for (int i7 = 3; i7 < 9; i7++) {
for (int i8 = 3; i8 < 9; i8++) {
System.out.println("" + i1 + i2 + i3
+ i4 + i5 + i6 + i7 + i8);
}
}
}
}
}
}
}
}
}
KingWolfOfSky 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bawgiitx 的回复:]
Java code

public static void main(String[] args) throws MalformedURLException, IOException {
int[] key = {3,4,5,6,7,8};
int[][] bb = allOrder(key);
//显示结果
Sy……
[/Quote]
有一组8位数的数字,其中的数字在3-8之间,就是说这组数字只包括(3、4、5、6、7、8);怎么循环输出它产生的所有数组。
keeya0416 2010-03-30
  • 打赏
  • 举报
回复
if(start > head)
要改成 if(start > head - 1)
忘了这个 要不当前题目中就少算了一个 33333333
keeya0416 2010-03-30
  • 打赏
  • 举报
回复
我又优化了下 上边那个getNumsbit(start) == length总是调用算位数,很浪费时间

public class Test {
public static void main(String[] args) {
SelectTheNum(3,8,8);
}
private static void Select(int start, int min, int max, int length, int head){
if(start > head){
System.out.println(start);
return;
}
for(int m = min; m <= max; m++){
Select( start*10 + m, min, max, length, head);
}
}
public static void SelectTheNum(int min, int max, int length){
//参数min,max为要用到的数字的区间,length为要生成的数字的位数;
int head = 0;
while(length > 0){
head = head*10 + min;
length--;
}
Select(0,min,max,length,head);
}
}

这个效率要比我上边写的高一点点 呵呵
毕竟那个总是调一个方法算数字位数够没,太繁琐了
tonytone2008 2010-03-30
  • 打赏
  • 举报
回复
恩,用递归貌似很简单样
keeya0416 2010-03-30
  • 打赏
  • 举报
回复
刚才代码写错了搞的溢出,还以为是数字太大了呢
发上我的 欢迎批评

public class Test {
public static void main(String[] args) {
SelectTheNum(3,8,8);
}


private static int getNumsbit(int i){
int temp = 0;
while(i > 0){
i /= 10;
temp++;
}
return temp;
}
private static void Select(int start, int min, int max, int length){
if(getNumsbit(start) == length){
System.out.println(start);
return;
}
for(int m = min; m <= max; m++){
Select( start*10 + m, min, max, length);
}
}
public static void SelectTheNum(int min, int max, int length){
//参数min,max为要用到的数字的区间,length为要生成的数字的位数;
Select(0,min,max,length);
}
}

这个可以传参指定2个数字的区间,还可以指定数字的长度。
keeya0416 2010-03-30
  • 打赏
  • 举报
回复
2楼的方法不错;判断的时候有点影响效率
但是想提高点效率用DP的话 又会栈溢出
Ark032425 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dazzlingwinter 的回复:]
Java code

public class MatchTest {
public static void main(String[] args) {
String str = null;
int count=0;
for(int i=33333333; i<=88888888; i++) {
str ……
[/Quote]
方法很多;还是这种比较快捷方便
zi2xuan 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kingwolfofsky 的回复:]
Java code

public static void main(String args[]) {
for (int i1 = 3; i1 < 9; i1++) {
for (int i2 = 3; i2 < 9; i2++) {
for (int i3 = 3; i3 < 9; i3++) {
……
[/Quote]
一般的机器受捕鸟!
musiclee 2010-03-30
  • 打赏
  • 举报
回复
恩 很简单!
bawgiitx 2010-03-30
  • 打赏
  • 举报
回复
run:
用时:1734ms,一共:1679616个
bawgiitx 2010-03-30
  • 打赏
  • 举报
回复

//上面 int [][] 改用 short[][] 速度更快,short16位char16位,key可表示字符不受影响

bawgiitx 2010-03-30
  • 打赏
  • 举报
回复
没必要用递归,下百是模块化的,也用不也了多久,全是打印花时间


public static void main(String[] args) throws MalformedURLException, IOException {
int[] key = {3, 4, 5, 6, 7, 8};
long time = System.currentTimeMillis();
int[][] tem = print(key, 8);
System.out.println("用时:"+(System.currentTimeMillis()-time)+"ms,一共:"+tem.length+"个");

/// 显示 start
int ttt = 1;
for (int i = 0; i < tem.length; i++) {
System.out.print(""+ttt+++":");//计数
for(int j=0;j<8;j++){
System.out.print(key[tem[i][j]]);
}
System.out.println();
}
/// 显示 end
}

/**
* 以key为关键字可重复的bit位数位的全排列
* @param key 显示的关键字
* @param bit 位数
*/
static int[][] print(int key[], int bit) {
int kl = key.length;
int Max = (int) Math.pow(kl, bit);
int[][] tem = new int[Max][bit];
for (int count = 0, j, b; count < Max; count++) {
for (j = bit - 1, b = count; j > -1; j--) {
tem[count][j] = b % kl;
b /= kl;
}
}
return tem;
}
/*run:
用时:2125ms,一共:1679616个
1:33333333
2:33333334
3:33333335
*/
bawgiitx 2010-03-29
  • 打赏
  • 举报
回复

public static void main(String[] args) throws MalformedURLException, IOException {
int[] key = {3,4,5,6,7,8};
int[][] bb = allOrder(key);
//显示结果
System.out.println("一共:"+bb.length+"个");
for (int[] s : bb) {
for (int i = 0; i < s.length; i++) {
System.out.print(s[i]);
if (i < s.length - 1) {
System.out.print(",");
}
}
System.out.println();
}
}

/**对key全排列
*/
static int[][] allOrder(final int[] key) {
java.util.LinkedList<int[]> list = new java.util.LinkedList<int[]>();
int length = key.length;
int[] itgr = new int[length];
System.arraycopy(key, 0, itgr, 0, length);
list.add(itgr);
for (int loop = 1; loop < length; loop++) {
int[][] tem = list.toArray(new int[list.size()][]);
for (int loop1 = 0; loop1 < loop; loop1++) {
for (int[] bft : tem) {
int[] itg = new int[length];
System.arraycopy(bft, 0, itg, 0, length);
int sw = itg[loop];
itg[loop] = itg[loop1];
itg[loop1] = sw;
list.add(itg);
}
}
}
return list.toArray(new int[list.size()][length]);
}


run:
一共:720个
3,4,5,6,7,8
4,3,5,6,7,8
5,4,3,6,7,8
5,3,4,6,7,8
3,5,4,6,7,8
4,5,3,6,7,8
6,4,5,3,7,8
6,3,5,4,7,8
6,4,3,5,7,8
--------
小余 2010-03-29
  • 打赏
  • 举报
回复
冬子哥 经常看到你啊
你真是我的偶像
shan1119 2010-03-27
  • 打赏
  • 举报
回复
欢迎批评指正
loop(0,1);
private static int cs=0;
public static void loop(int v, int l){
for(int i=8;i>=3;i--){
if((v+i*l)/10000000>0){
cs++;
// System.out.print(cs+":"+(v+i*l)+"\t\t");
// if(cs%10==0)System.out.println();
}else
loop(v+i*l,l*10);
}
}
hepeng_8 2010-03-27
  • 打赏
  • 举报
回复
loop(0,1);
private static int cs=0;
public static void loop(int v, int l){
for(int i=8;i>=3;i--){
if((v+i*l)/10000000>0){
cs++;
// System.out.print(cs+":"+(v+i*l)+"\t\t");
// if(cs%10==0)System.out.println();
}else
loop(v+i*l,l*10);
}
}


递归就是最好的方法啊
shan1119 2010-03-26
  • 打赏
  • 举报
回复
我也写一个,等高人出好的

int count=0;
for(int i=33333333; i<=88888888; i++) {
if(i/10000000>=3 && i/10000000<=8 &&
i%10000000/1000000>=3 && i%10000000/1000000<=8 &&
i%1000000/100000>=3 && i%1000000/100000<=8 &&
i%100000/10000>=3 && i%100000/10000<=8 &&
i%10000/1000>=3 && i%10000/1000<=8 &&
i%1000/100>=3 && i%1000/100<=8 &&
i%100/10>=3 && i%100/10<=8 ){
count++;
System.out.print(count + ":" + i + "\t\t");
if(count%10==0)System.out.println();
}
}
SS_YI123 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dazzlingwinter 的回复:]

Java code

public class MatchTest {
public static void main(String[] args) {
String str = null;
int count=0;
for(int i=33333333; i<=88888888; i++) {
str = Str……
[/Quote]

哈哈,又是这位哥们,用正则表达式用得挺熟练的,佩服佩服~
24K純帥 2010-03-26
  • 打赏
  • 举报
回复
全排列,用递归解决~
加载更多回复(2)
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...
源码链接: https://pan.quark.cn/s/a4b39357ea24 小程序雷达 AI 驱动的小程序生态选型与风险评估工具,把微信小程序开发资源转化为可筛选、可评估、可对比的技术雷达。 线上地址 主站: Vercel: 适合谁 正在做微信小程序技术选型的产品、研发和架构团队。 需要判断 Taro、uni-app、原生小程序、组件库、云开发和 SDK 风险的团队。 需要把历史 awesome 列表转成可筛选、可对比、可验证技术雷达的维护者。 可以做什么 Radar:按推荐状态、风险等级、资源类型、分类和适用场景浏览小程序生态资源。 Quick Search:快速搜索资源并跳转常用页面。 Compare:对比 Taro、uni-app、原生小程序等核心方案。 Advisor:输入选型问题,获得推荐结论、适用/不适用条件、迁移成本、下一步和证据来源。 Doctor:粘贴小程序项目配置,识别框架依赖、过时方案和迁移风险。 Weekly:查看小程序生态周报和近期风险信号。 数据概览 当前数据集中包含 236 个小程序生态资源。 完整资源可在 Radar 页面和导出能力中查看。 核心样例 Taro ★30.6k+ - 使用 React 的方式开发小程序的框架,同时支持生成多端应用 uni-app ★36.1k+ - 使用 Vue 语法开发小程序、H5、App的统一框架 MPX ★2.1k+ - 增强型小程序框架,深度性能优化,支持跨小程序平台开发,完全兼容原生小程序组件 WePY ★21.7k+ - 支持组件化的小程序开发框架 vant-weapp ★12.3k+ - 高颜值、好用、易扩展的微信小程序 UI 库 tdesign-miniprogram ★1.3...

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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