地理老师在黑板上画了一张世界地图,划分为五大洲,每个洲取个代号,五个学生来认 没人只答对一半。
甲:3号是欧洲,2号是美洲
乙:4号是亚洲,2号是大洋洲
丙:1号是亚洲,5号是非洲
丁:4号是非洲,3号是大洋洲
卯:2号是欧洲,5号是美洲
请问用程序怎么写出来,(最好甲乙丙丁卯当成条件去验证)

解决方案 »

  1.   

    大致明白楼主的意思了,好似一个排列组合问题,不知道你正确的各洲编号是多少,我假定下下面的声明: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()对正确的回答进行随机化,吃饭去了....
      

  2.   


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

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

    str = "";
    for(i = 0; i < 5; ++i){
    tmp[i] = rst[i];
    tmp[i] += place[[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));
    }
    }
      

  3.   

    我做了一个,不过测试结果是没有答案,不知道哪儿不对了
    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;
    }
    }
      

  4.   


    不好意思修改一下
    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;
    }
    }
      

  5.   

    我题目错了
    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;
    }
    }
      

  6.   


    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;
    }
    }