java - 如何在java中打印3的子集?
问题描述
我正在学习我的大学提供的一门课程,并在其中一个代码挑战中遇到问题。
问题是: 编写一个 Java 代码来打印所有大小为 3 的子集。
样本输入:
arr_size = 5
arr[] = {1, 7, 3, 4, 9}
样本输出:
(1, 7, 3) (1, 7, 4) (1, 7, 9) (1, 3, 4) (1, 3, 9) (1, 4, 9)
(7, 3, 4) (7, 3, 9) (7, 4, 9)
(3, 4, 9)
我为此编写的代码:
import java.util.Scanner;
class Main{
public static void main(String args[]) {
// Type your code here
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[] = new int[n];
for(int i=0; i<n;i++)
a[i] = in.nextInt();
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int k = j+1; k<n; k++)
{
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ") ");
}
}
if(i<2)
System.out.print("\n");
}
}
}
我的输出与预期输出匹配,但网站显示错误。我不知道我哪里错了。有谁能够帮我??
这是我的输出和预期输出的屏幕截图:
解决方案
问题是因为下面提到的三个问题:
无条件地将空格(在末尾)放在以下行中:
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ") ");
空格应该只在两个子集之间,而不是在一行的末尾。写如下:
if (j < n - 2) { System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ") "); } else { System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ")"); }
如果您对三元运算符感到满意,则可以将其写在一行中,如下所示:
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + (j < n - 2 ? ") " : ")"));
错误的迭代次数:
以下声明中的条件导致循环运行超过所需的时间,因此,即使在所需的输出完成后,它也会导致打印换行符。请注意,如果
n
数组中有元素,则输出的行数应该是 onlyn-2
,而且换行符应该只打印n-3
几次(最后一行的换行符不是必需的)。for (int i = 0; i < n; i++)
将其替换为
for (int i = 0; i < n - 2; i++)
断线的错误条件:
i<2
以下条件仅在数组中有5
元素但尝试使用或更多元素的情况下才导致换行符7
,您将能够理解它导致了什么问题。if(i<2)
将其替换为
if (i < n - 3)
除此之外,我还建议您更换
System.out.print("\n");
和
System.out.println();
或与
System.out.printf("%n");
因为推荐的版本使用平台的首选行分隔符输出换行符,而
System.out.print("\n")
这是一种蛮力方式(即强制系统\n
用作行分隔符),这对于某些平台可能是一个问题。以下代码包含所有这些建议:
import java.util.Scanner; class Main { public static void main(String args[]) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = in.nextInt(); for (int i = 0; i < n - 2; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + (j < n - 2 ? ") " : ")")); } } if (i < n - 3) System.out.println(); } } }
示例运行:
7 1 2 3 4 5 6 7 (1, 2, 3) (1, 2, 4) (1, 2, 5) (1, 2, 6) (1, 2, 7) (1, 3, 4) (1, 3, 5) (1, 3, 6) (1, 3, 7) (1, 4, 5) (1, 4, 6) (1, 4, 7) (1, 5, 6) (1, 5, 7) (1, 6, 7) (2, 3, 4) (2, 3, 5) (2, 3, 6) (2, 3, 7) (2, 4, 5) (2, 4, 6) (2, 4, 7) (2, 5, 6) (2, 5, 7) (2, 6, 7) (3, 4, 5) (3, 4, 6) (3, 4, 7) (3, 5, 6) (3, 5, 7) (3, 6, 7) (4, 5, 6) (4, 5, 7) (4, 6, 7) (5, 6, 7)
推荐阅读
- swift - 在 SwiftUI 文本编辑器中设置光标位置
- html - Bootstrap:折叠手风琴不起作用
- reactjs - 微软 OCR-Form-Tools 项目 v2.0-GA 版本中的 yarn start 失败
- python-3.x - 我收到“AttributeError:‘str’对象没有属性
- python - ZeroMQ RADIO 套接字发送没有设置组的选项
- python - Discord.py 在不使用消息功能的情况下返回用户名?
- php - 使用PHP从mysql中动态选择一个表
- javascript - Svg 火焰多边形动画
- javascript - 在javascript中读取本地json文件作为要在javascript文件中使用的对象
- php - 在 WooCommerce 自定义订单历史记录中添加永久链接到产品标题