- package com.itheima;
- /*
- * 需求:从1,2.。。n中取r个数,r < n,不可重复,有多少种取法。
- * 例如,从1,2,3,4,5中取3个数,共有123;124;125;134;135;145;234;235;245;345.这十种取法。
- */
- public class Test11 {
- public static void main(String[] args) {
- method(5, 3);
- }
- // 共n个数,取出r个
- public static void method(int n, int r) {
- // 定义数组
- int[] iarr = new int[n];
- for (int x = 0; x < n; x++) {
- iarr[x] = x + 1;
- }
- // 判断r的值,并输出符合条件的数字的组合
- if (r == 1) {
- method1(iarr, r);
- } else if (r == 2) {
- method2(iarr, r);
- } else {
- int count = 0;// 定义变量,当pos2往后推一个角标,pos3的初始值也应往后推一个角标
- // 定义3个指针
- for (int pos1 = 0; pos1 <= n - r; pos1++) {
- for (int pos2 = pos1 + 1; pos2 <= n - r + 1; pos2++, count++) {
- for (int pos3 = pos1 + r - 1 + count; pos3 < iarr.length; pos3++) {
- // 输出
- System.out.print(iarr[pos1]);
- for (int x = pos2; x < pos1 + r - 1 + count; x++) {
- System.out.print(iarr[x]);
- }
- System.out.println(iarr[pos3]);
- }
- }
- count = 0;
- }
- }
- }
- // 当r==2的时候调用此方法。
- private static void method2(int[] iarr, int r) {
- for (int pos1 = 0; pos1 < iarr.length - 1; pos1++) {
- for (int pos2 = pos1 + 1; pos2 < iarr.length; pos2++) {
- System.out.print(iarr[pos1]);
- System.out.println(iarr[pos2]);
- }
- }
- }
- // 当r==1的时候,调用此方法
- private static void method1(int[] iarr, int r) {
- for (int x = 0; x < iarr.length; x++) {
- System.out.println(iarr[x]);
- }
- }
- }
复制代码
想了好久,写的不知道是否有点复杂了,是定义了几个指针实现的。希望可以帮到楼主 |