我的规格如下:
编写一个程序,打印出两个加起来为7的数字的所有排列。提示:你可以使用两个嵌套for循环。
我已经这样做但我知道这是不正确的。我应该输入什么数字?
public class NestedFor {
public static void main(String[] args) {
for(int i=1; i<=3; i++) {
for(int j=1; j<=i; j++) {
System.out.println(i+ " " +j);
}
}
}
}
答案 0 :(得分:8)
试试这个(我假设你想要非负数,否则你有无限的可能性):
for(int i=0; i<=7, i++)
{
System.out.println(i + "+" + (7-i));
}
不需要两个for循环。
如果不是非负数,则需要正数,这将成为:
for(int i=1; i<7, i++)
{
System.out.println(i + "+" + (7-i));
}
答案 1 :(得分:2)
你快到了。以下是您需要考虑的事项:
1
到6
,包括1
到3
。i
的内循环,也不要停留1
到6
,包括if
和i
之前,您需要先添加j
支票。一旦你解决了上述三件事,你的程序应该可行。祝你好运!
答案 2 :(得分:1)
你的循环应该在1和7之间循环。然后在最后一个for循环中你需要检查i和j的总和是否等于7.如果是,则打印这两个数字。
答案 3 :(得分:1)
你真的不需要嵌套循环。
for (ii = 0; ii<8; ii++) {
System.out.printf("(%d, %d)\n",ii,7-ii);
}
保持简单。
我知道“提示”说你可以使用两个嵌套循环;但根据我的经验,不应忽视一点点聪明。当你的问题变得更大时,O(n)而不是O(N ^ 2)是一个巨大的差异......
答案 4 :(得分:1)
一些调整:我冒昧地发布解决方案,但请确保你理解它!
for (int i = 0; i <= 7/*Need to consider all numbers from 0 to 7*/ ; ++i) {
for (int j = 0; j <= i /*Don't overoptimise: this is good enough and will not generate duplicates*/; j++) {
if (i + j == 7){
System.out.println(i+ "," +j);
}
}
}
这不是最快的方式;一旦你有了解决方案,就花一些时间进行优化。
答案 5 :(得分:1)
试试这个:
for(int i=0;i<7;i++){ //First Loop
for(int j=7;j>0;j--){//Send loop
if((i+j)==7) System.out.println(i+" , "+j); //Permutations printed to terminal
}
}
我想这是自我解释,两个循环相互走向。运行它,看看可爱的结果;)
在数学中,置换的概念与置换(重新排列)对象或值的行为有关。
答案 6 :(得分:0)
检查它们是否合计为7
if (i+j == 7)
{
//then they add to 7
}
如果你想要1到7之间的所有数字加起来为7,它们都应该介于1和7之间。如果你想要包含0,那么就从那里开始。
for (int i=1; i<=7; i++)
...您可能想要排除重复
for(int i=1; i<=7; i++) {
for(int j=i; j<=7; j++) { //starts at i, not 1
/* Only check j against numbers equal to or lower than itself
/* to avoid duplicates
*/
}
}
<强>另外强>
根据惯例,类名应以国会大厦字母开头,并以驼峰形式开头(短语中的每个单词都有国会大厦字母
NestedFor
答案 7 :(得分:0)
public class NestedFor {
public static void main(String[] args) {
for(int i=1; i<=7; i++) {
for(int j=1; j<i; j++) {
if (i + j == 7 ) {
System.out.println(i+ " " +j);
}
}
}
}
}