当前位置:编程学习 > JAVA >>

初学者求程序如何表达

地理老师在黑板上画了一张世界地图,划分为五大洲,每个洲取个代号,五个学生来认 没人只答对一半。
甲:3号是欧洲,2号是美洲
乙:4号是亚洲,2号是大洋洲
丙:1号是亚洲,5号是非洲
丁:4号是非洲,3号是大洋洲
卯:2号是欧洲,5号是美洲
请问用程序怎么写出来,(最好甲乙丙丁卯当成条件去验证) --------------------编程问答-------------------- 这个题你要的最终目的是输入正确的每个洲的代号吗? --------------------编程问答-------------------- 是输出每个正确的洲号和代码比如1号是X洲,推结果我会程序不会写 --------------------编程问答-------------------- 好吧,世界处处是代码 --------------------编程问答-------------------- 求思路,好像小学划线题一样,代码要怎么表达 
引用 3 楼 simaweier 的回复:
好吧,世界处处是代码
--------------------编程问答-------------------- 大致明白楼主的意思了,好似一个排列组合问题,不知道你正确的各洲编号是多少,我假定下下面的声明:

public class Test {
public static void main(String[] args){
int[] Id={1,2,3,4,5};
String[] Name={"亚洲","欧洲","非洲","美洲","大洋洲"};
        for(int i=0;i<5;i++){  
     System.out.print(Id[i]+"号是"+Name[i]+" ");//先答对一个
 int s=getNoRepeatNum(Id,i);
 System.out.println(Id[s]+"号是"+Name[s<4?s+1:s-1]);//再答错一个 
}
}   
public static int getNoRepeatNum(int[] array,int number){
int[] Array=new int[array.length-1];
int index=0;
for(int i=0;i<array.length;i++){
if(i!=number){
Array[index]=i;
index++;
}
}
return Array[(int)(Math.random()*Array.length)];
}
}

代码还有改进下,你可以用getNoRepeatNum()对正确的回答进行随机化,吃饭去了.... --------------------编程问答--------------------

public class Test {
public static String test(String[][] condition, String[] place, String[] rst) {
String[] tmp = new String[rst.length];
int[] mark = new int[6];
int[] cnt = new int[5];
int i;
String str = null;
for (i = 0; i < 6; ++i) {
mark[i] = 0;
}
while (mark[5] == 0) {
++mark[0];
for (i = 0; i < 5; ++i) {
cnt[i] = 0;
if (mark[i] >= 5) {
mark[i] -= 5;
++mark[i + 1];
}

}
for (i = 0; i < 5; ++i) {
++cnt[mark[i]];
if (cnt[mark[i]] > 1) {
break;
}
}

if(cnt[mark[i]] > 1){
continue;
}

str = "";
for(i = 0; i < 5; ++i){
tmp[i] = rst[i];
tmp[i] += place[mark[i]];
str += tmp[i];
}
for(i = 0; i < 5; ++i){
int index1 = str.indexOf(condition[i][0]);
int index2 = str.indexOf(condition[i][1]);
if((index1 != -1 && index2 != -1) || (index1 == -1 && index2 == -1)){
break;
}
}
if(i == 5){
//System.out.println(str);
return str;
}
}
return null;
}

public static void main(String arsg[]) {
String[][] condition = { { "3号是欧洲", "2号是美洲" }, { "4号是亚洲", "2号是大洋洲" },
{ "1号是亚洲", "5号是非洲" }, { "4号是非洲", "3号是大洋洲" },
{ "2号是欧洲", "5号是美洲" } };
String[] place = { "欧洲", "美洲", "亚洲", "大洋洲", "非洲" };
String[] rst = { "1号是", "2号是", "3号是", "4号是", "5号是" };
System.out.println(test(condition, place, rst));
}
}

--------------------编程问答-------------------- 我做了一个,不过测试结果是没有答案,不知道哪儿不对了
package 五大洲;

public class FiveContinent {
private static int id[] = {1,2,3,4,5};
private static String continents[] = {"亚洲","欧洲","非洲","美洲","大洋洲"};

public static void main(String[] args) {
// TODO 自动生成方法存根
perm(continents,0,4);
}

private static void perm(String continents[],int i,int n) {             //此算法本质是递归求字符串的全排列问题
int j;
String temp;
if(i==n){
if(getResult(continents,3,"欧洲",2,"美洲") == 0){
if(getResult(continents,4,"亚洲",2,"大洋洲") ==0){
if(getResult(continents,1,"亚洲",5,"非洲")==0){
if(getResult(continents,4,"亚洲",3,"大洋洲")==0){
if(getResult(continents,2,"欧洲",5,"美洲")==0){
for(int k = 0; k < id.length; k++){
System.out.println(k+1+"号是: "+continents[k]);
}
}
}
}
}
}
}
else{
for(j=i;j<=n;j++){
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
perm(continents,i+1,n);
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
}
}
}

private static int getResult(String continents[],int index1, String str1, int index2, String str2){
int result = 0;
index1--;
index2--;
if(continents[index1].equals(str1))
result++;
else
result--;

if(continents[index2].equals(str2))
result++;
else
result--;

return result;
}
}
--------------------编程问答--------------------
引用 7 楼 wangdong20 的回复:
我做了一个,不过测试结果是没有答案,不知道哪儿不对了

Java code

package 五大洲;

public class FiveContinent {
    private static int id[] = {1,2,3,4,5};
    private static String continents[] = {"亚洲","欧洲","非洲","美洲","大洋洲"……

不知道我是不是题意没明白 --------------------编程问答--------------------
引用 7 楼 wangdong20 的回复:
我做了一个,不过测试结果是没有答案,不知道哪儿不对了
Java code
package 五大洲;

public class FiveContinent {
    private static int id[] = {1,2,3,4,5};
    private static String continents[] = {"亚洲","欧洲","非洲","美洲","大洋洲"};

   ……


这么多的if嵌套 。。。碉堡了 --------------------编程问答-------------------- 这日子没法过了.  --------------------编程问答--------------------
引用 9 楼 a395885670 的回复:
引用 7 楼 wangdong20 的回复:

我做了一个,不过测试结果是没有答案,不知道哪儿不对了
Java code
package 五大洲;

public class FiveContinent {
private static int id[] = {1,2,3,4,5};
private static String continents[] = {"亚洲","欧洲","……


不好意思修改一下
package 五大洲;

public class FiveContinent {
private static int id[] = {1,2,3,4,5};
private static String continents[] = {"亚洲","欧洲","非洲","美洲","大洋洲"};

public static void main(String[] args) {
// TODO 自动生成方法存根
perm(continents,0,4);
}

private static void perm(String continents[],int i,int n) {             //此算法本质是递归求字符串的全排列问题
int j;
String temp;
if(i==n){
if((getResult(continents,3,"欧洲",2,"美洲")== 0)
&&(getResult(continents,4,"亚洲",2,"大洋洲") ==0)
&&(getResult(continents,1,"亚洲",5,"非洲")==0)
&&(getResult(continents,4,"亚洲",3,"大洋洲")==0)
&&(getResult(continents,2,"欧洲",5,"美洲")==0)){

for(int k = 0; k < id.length; k++){
System.out.println(k+1+"号是: "+continents[k]);
}

}
}
else{
for(j=i;j<=n;j++){
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
perm(continents,i+1,n);
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
}
}
}

private static int getResult(String continents[],int index1, String str1, int index2, String str2){
int result = 0;
index1--;
index2--;
if(continents[index1].equals(str1))
result++;
else
result--;

if(continents[index2].equals(str2))
result++;
else
result--;

return result;
}
}
--------------------编程问答--------------------
引用 11 楼 wangdong20 的回复:
引用 9 楼 a395885670 的回复:
引用 7 楼 wangdong20 的回复:

我做了一个,不过测试结果是没有答案,不知道哪儿不对了
Java code
package 五大洲;

public class FiveContinent {
private static int id[] = {1,2,3,4,5};
private static String con……

我题目错了
package 五大洲;

public class FiveContinent {
private static int id[] = {1,2,3,4,5};
private static String continents[] = {"亚洲","欧洲","非洲","美洲","大洋洲"};

public static void main(String[] args) {
// TODO 自动生成方法存根
perm(continents,0,4);
}

private static void perm(String continents[],int i,int n) {             //此算法本质是递归求字符串的全排列问题
int j;
String temp;
if(i==n){
if((getResult(continents,3,"欧洲",2,"美洲")== 0)
&&(getResult(continents,4,"亚洲",2,"大洋洲") ==0)
&&(getResult(continents,1,"亚洲",5,"非洲")==0)
&&(getResult(continents,4,"非洲",3,"大洋洲")==0)//这个条件的非洲开始错写成亚洲了,所以没有答案
&&(getResult(continents,2,"欧洲",5,"美洲")==0)){

for(int k = 0; k < id.length; k++){
System.out.println(k+1+"号是: "+continents[k]);
}

}
}
else{
for(j=i;j<=n;j++){
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
perm(continents,i+1,n);
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
}
}
}

private static int getResult(String continents[],int index1, String str1, int index2, String str2){
int result = 0;
index1--;
index2--;
if(continents[index1].equals(str1))
result++;
else
result--;

if(continents[index2].equals(str2))
result++;
else
result--;

return result;
}
}
--------------------编程问答--------------------

package 五大洲;

public class FiveContinent {
private static int id[] = {1,2,3,4,5};
private static String continents[] = {"亚洲","欧洲","非洲","美洲","大洋洲"};

public static void main(String[] args) {
// TODO 自动生成方法存根
perm(continents,0,4);
}

private static void perm(String continents[],int i,int n) {             //此算法本质是递归求字符串的全排列问题
int j;
String temp;
if(i==n){
if((getResult(continents,3,"欧洲",2,"美洲")== 0)
&&(getResult(continents,4,"亚洲",2,"大洋洲") ==0)
&&(getResult(continents,1,"亚洲",5,"非洲")==0)
&&(getResult(continents,4,"非洲",3,"大洋洲")==0))//这个条件的非洲开始错写成亚洲了,所以没有答案

&&(getResult(continents,2,"欧洲",5,"美洲")==0)){

for(int k = 0; k < id.length; k++){
System.out.println(k+1+"号是: "+continents[k]);
}

}
}
else{
for(j=i;j<=n;j++){
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
perm(continents,i+1,n);
temp = continents[i];
continents[i] = continents[j];
continents[j] = temp;
}
}
}

private static int getResult(String continents[],int index1, String str1, int index2, String str2){
int result = 0;
index1--;
index2--;
if(continents[index1].equals(str1))
result++;
else
result--;

if(continents[index2].equals(str2))
result++;
else
result--;

return result;
}
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,