如何从串连续自然数中均匀的取出5个数字?

vigiles 2016-05-15 11:15:33
比如:
1、2、3、4、5,取1、2、3、4、5
1、2、3、4、5、6、7、8、9、10,取1、3、5、7、92、4、6、8、10
1、2、3、4、5、6、7、8、9、10、11、12、13,取1、4、7、10、13
也就是从给定的数组中按照索引比较均匀间隔的取出5个数
请问如何用代码实现?
...全文
446 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kernelkoder 2016-05-17
  • 打赏
  • 举报
回复
你看一下shellsort的原理
Tiger_Zhao 2016-05-16
  • 打赏
  • 举报
回复
我#1给的就是“任意数组取任意长度”啊。
当然 FIND_COUNT=1 时要再做个处理,直接出一个结果,否则除零错。
vigiles 2016-05-16
  • 打赏
  • 举报
回复
球球网友aiss306381547给的算法:

	static int[] algorithm() {
		int result[] = new int[5];
		int[] target = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
				17, 18, 19, 20 };// , 21 };
		int metic = target[target.length - 1] / 5 + 1;// 等差的数值

		for (int j = 0; j < target.length; j++) {// 遍历数组 从第一个开始元素累加最大数值开始 是否满足要求
			for (int i = metic; i > 0; i--) {// 最大的等差数值依次递减
				int s = target[j];
				for (int k = 0; k < 5; k++) {
					if (s > target[target.length - 1]) {
						break;
					} else {
						result[k] = s;
						s += i;
						if (k == 4) {// 满足5个数据时
							return result;
						}
					}
				}
			}
		}
		return null;
	}
vigiles 2016-05-16
  • 打赏
  • 举报
回复
引用 3 楼 hjywyj 的回复:
谢谢!谢谢!我修改了下,基本能满足题设了。

	static void getArr() {
		int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
		int FIND_COUNT = 5; // 目标数量
		int lCount = 0; // 数组长度
		int lStep = 0;
		int i = 0;
		int j = 0;

		lCount = a.length;
		if (lCount < FIND_COUNT) {
			System.out.println("数量不足");
			return;
		}

		lStep = (lCount - 1) / (FIND_COUNT - 1);
		System.out.print("lStep:" + lStep + "\n");

		j = lCount - 1;
		for (int ik = lCount - 1; ik > -1; ik--) {
			System.out.print(a[j] + ",");

			j -= lStep;
			if (j < 0)
				break;
		}
	}
之后再修改先下,看看能不能实现任意数组取任意长度。 还请继续指点!
  • 打赏
  • 举报
回复
引用 2 楼 Vigiles 的回复:
[quote=引用 1 楼 Tiger_Zhao 的回复:]
不是我的小号。 感谢帮助!我把你的代码转成java语言,结果很悲催

	static void getArr(){
	   	int FIND_COUNT = 5;
	    int[] a = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
	    int lCount = 0;
	    int lStep = 0;
	    int i = 0;
	    int j = 0;
	     
	    lCount = a.length + 1;
	    if( lCount < FIND_COUNT){
	        System.out.println("数量不足");
	        return;
	    }
	 
	    lStep = (lCount - 1) / (FIND_COUNT - 1);
	     
	    j = a[0];
	    for( int ik = 1; ik < FIND_COUNT; ik++){
	        System.out.print(a[j]);
	        if(ik < FIND_COUNT)
	        	System.out.print(", ");
	         
	        j = j + lStep;
	    }
	}
输出 2, 5, 8, 11, 请查看下哪个地方不对[/quote] for( int ik = 1; ik < FIND_COUNT; ik++) => for( int ik = 1; ik <= FIND_COUNT; ik++)
vigiles 2016-05-16
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
不是我的小号。 感谢帮助!我把你的代码转成java语言,结果很悲催

	static void getArr(){
	   	int FIND_COUNT = 5;
	    int[] a = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
	    int lCount = 0;
	    int lStep = 0;
	    int i = 0;
	    int j = 0;
	     
	    lCount = a.length + 1;
	    if( lCount < FIND_COUNT){
	        System.out.println("数量不足");
	        return;
	    }
	 
	    lStep = (lCount - 1) / (FIND_COUNT - 1);
	     
	    j = a[0];
	    for( int ik = 1; ik < FIND_COUNT; ik++){
	        System.out.print(a[j]);
	        if(ik < FIND_COUNT)
	        	System.out.print(", ");
	         
	        j = j + lStep;
	    }
	}
输出 2, 5, 8, 11, 请查看下哪个地方不对
vigiles 2016-05-16
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
谢谢!和预期的还有定点差异,但已经非常棒了。还望以后不吝赐教!
Tiger_Zhao 2016-05-16
  • 打赏
  • 举报
回复
求小算法:一组数中找出连续14个数相邻大小交替的数 求算法:一组数中连续6个数递增或递减 这是马甲?
Option Explicit

Sub Main()
    Const FIND_COUNT As Long = 5
    Dim a()         As Variant
    Dim lCount      As Long
    Dim lStep       As Long
    Dim i           As Long
    Dim j           As Long
    
    a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
    
    lCount = UBound(a) - LBound(a) + 1
    If lCount < FIND_COUNT Then
        Debug.Print "数量不足"
        Exit Sub
    End If

    lStep = Fix((lCount - 1) / (FIND_COUNT - 1))
    
    j = LBound(a)
    For i = 1 To FIND_COUNT
        Debug.Print CStr(a(j));
        If i < FIND_COUNT Then Debug.Print ", ";
        
        j = j + lStep
    Next
    Debug.Print
End Sub
1, 4, 7, 10, 13

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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