6、有A、B、C、D和E共5所学校。在一次检查评比中,已知E肯定不是第2或第3名,他们互相进行推测,A校有人说,E校肯定是第1名;B校有人说,我校可能是第2名;C校有人说,A校最差;D校有人说,C校不是最好;E校有人说,D校会获得第一名。结果只有第一名和第二名的学校的人猜对了。编程指出这5所学校的名词。7、有数字5、6、7、8、9,将五个数字任意组合成两个数字,比如57和689,每个数字不能重复使用,将组成的两个数字相乘,会得到一个乘积。请编程计算组成的哪两个数字的乘积最大。8、将1-9这九个数字填入九个空格中,每一横行的三个数字组成一个三位数,如果要使第二行的三位数是第一行的两倍,第三行的三位数是第一行三位数的3倍,应该怎样填数?如下图所示:
1 9 2
3 8 4
5 7 6java编程
1 9 2
3 8 4
5 7 6java编程
解决方案 »
- NetBeans建立项目后生成三个java文件aboutbox app view……
- 跪求Jprofiler6.2.3 10天的试用License!谢谢!
- 一个关于窗口的初级问题,不要砸砖哦
- java路径问题??在线等
- 如何从request获取客户端浏览器的分辨率
- javamail接收gmail邮件时一次只能接收一部分??
- 那位有关于在浏览器中实现套打的好的方法???
- jbuilder6 中odbc问题
- classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" ????
- 找了一个“TXT在线阅读小说系统”的小项目做,遇到了一个问题。想不明白,请大家帮忙解决一下。
- 求助一个正则表达式
- 烦死了,mac下如何替换系统自带的jdk
void main()
{ int a,b,c,d,e,i,m,b0,b1;
int x[6];
for(i=1;i<6;i++)x[i]=1;
for(a=1;a<=5;a++) //A校名次由1测到5
{ x[a]=0;
for(b=1;b<=5;b++) //B校名次由1测到5
if(x[b])
{ x[b]=0;
for(c=1;c<=5;c++) //C校名次由1测到5
if(x[c])
{ x[c]=0;
for(d=1;d<=5;d++) //D校名次由1测到5
if(x[d])
{ x[d]=0;
e = 15-a-b-c-d;
for(e=1;e<=5;e++) //e校名次由1测到5
if(x[e])
{
{
b0=(e!=2)&&(e!=3);
m=(e==1)+(b==2)+(a==5)+(c!=1)+(d==1);
b1=(e==1)&&(a!=2);
b1=b1+((a==5)&&(c!=1)&&(c!=2));
b1=b1+((c!=1)&&(d!=1)&&(d!=2));
b1=b1+((d==1)&&(e!=2));
}
if(b0==1 && m==2 && b1==0)
printf("A:%d B:%d C:%d D:%d E:%d/n",a,b,c,d,e);
}
x[d]=1;
}
x[c]=1;
}
x[b]=1;
}
x[a]=1;
}
}
这些能百度到的问题,就不要问了
int num2;
int num3;
for (int num1 = 123; num1 < 333; num1++) {
num2 = num1 * 2;
num3 = num1 * 3;
char[] str = (String.valueOf(num1) + String.valueOf(num2) + String
.valueOf(num3)).toCharArray();
if (checkDup(str)) {
System.out.println("第一个" + num1 + " 第二个" + num2 + " 第三个"
+ num3);
}
}
} static boolean checkDup(char[] str) {
for (int i = 0; i < str.length - 1; i++) {
for (int j = i; j < str.length - 1; j++) {
if (str[i] == str[j + 1] || str[j + 1] == '0') {
return false;
}
}
}
return true;
}
* 8、将1-9这九个数字填入九个空格中,每一横行的三个数字组成一个三位数,如果要使第二行的三位数是第一行的两倍,第三行的三位数是第一行三位数的3倍,
* 应该怎样填数?如下图所示:
*
* 1 9 2
* 3 8 4
* 5 7 6
*/
public class Test014 {
public static void main(String[] args) {
fun1();
} static void fun1() {
for (int i = 129; i <= 327; ++i) {
if (i % 5 == 0)
continue;
String str = "" + i + i * 2 + i * 3;
if (check(str)) {
System.out.println("***find***");
System.out.println(i + "\n" + i * 2 + "\n" + i * 3);
}
}
} static boolean check(String str) {
int[] arr = new int[10];
char[] chars = str.toCharArray();
for (char c : chars) {
++arr[c - '0'];
}
boolean result = true;
for (int i = 1; result && i < arr.length; ++i) {
result &= (arr[i] == 1);
}
return result;
}
}
public static void main(String[] args)
{
//已知数据5,6,7,8,9
int[] num={5,6,7,8,9};
//定义第二个数
int num1=0;
int num2=0;
//分析题意可知2位数和3位数的积最大
//选第一个数:
//0-4
int max=0;
for (int i = 0; i < num.length; i++)
{
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
a=num[i];
for (int j = 0; j < num.length; j++)
{
if(j!=i)
{
b=num[j];
}
else
{
continue;
}
for (int k = 0; k < num.length; k++)
{
if(k!=i&&k!=j)
{
c=num[k];
}
else
{
continue;
}
for (int l = 0; l < num.length; l++)
{
if(l!=i&&l!=j&&l!=k)
{
d=num[l];
}
else
{
continue;
}
for (int m = 0; m < num.length; m++)
{
if(m!=i&&m!=j&&m!=k&&m!=l)
{
e=num[m];
String temp1=a+""+b;
String temp2=c+""+d+""+e;
int mc=Integer.parseInt(temp1)*Integer.parseInt(temp2);
if(mc>max)
{
max=mc;
num1=Integer.parseInt(temp1);
num2=Integer.parseInt(temp2);
}
}
else
{
continue;
}
}
}
}
}
}
System.out.print(num1+"\t"+num2);
}
答案是对的,不知道会不会出现什么异常情况,
/**
* 7、有数字5、6、7、8、9,将五个数字任意组合成两个数字,比如57和689,每个数字不能重复使用,将组成的两个数字相乘,会得到一个乘积。
* 请编程计算组成的哪两个数字的乘积最大。
*
*
*/
public class Test013 {
public static void main(String[] args) {
findMax();
} static void findMax() {
int[] arr = new int[] { 9, 8, 7, 6, 5 };
int n1 = 0,n2 = 0;
for (int i : arr) {
if(n1 == 0) n1 = i;
else if(n2 == 0) n2 = i;
else if (n1 > n2) n2 = n2 * 10 + i;
else if (n1 < n2) n1 = n1 * 10 + i;
}
System.out.printf("%d * %d = %d", n1 ,n2 ,n1 * n2);
}
}
2了,判断条件写这么复杂
优化一下/**
* 7、有数字5、6、7、8、9,将五个数字任意组合成两个数字,比如57和689,每个数字不能重复使用,将组成的两个数字相乘,会得到一个乘积。
* 请编程计算组成的哪两个数字的乘积最大。
*
*
*/
public class Test013 {
public static void main(String[] args) {
findMax();
} static void findMax() {
int[] arr = new int[] { 9, 8, 7, 6, 5 };
int n1 = 0,n2 = 0;
for (int i : arr) {
if (n1 > n2) n2 = n2 * 10 + i;
else n1 = n1 * 10 + i;
}
System.out.printf("%d * %d = %d", n1 ,n2 ,n1 * n2);
}
}
int[] num = { 5, 6, 7, 8, 9 };
int length = num.length;
int firstnum = 0;
int secondnum = 0;
int result = 0;
int finalresult = 0;
Map< Integer, String> map= new HashMap<Integer, String>();
for (int i = 0; i < 5; i++) {
firstnum = num[i];
secondnum = 0;
for (int j = 4; j >= 0; j--) {
if (num[j] == firstnum) {
continue;
} else {
secondnum = secondnum * 10 + num[j];
result = firstnum * secondnum;
String s =" "+firstnum +"*"+secondnum;
map.put(result, s);
}
}
if (finalresult < result) {
finalresult = result;
System.out.println(firstnum + "*" + secondnum + "=" + result);
} } for (int a = 0; a < length; a++) {
for (int b = 0; b < length; b++) {
if (a < b) {
firstnum = num[b] * 10 + num[a];
} else if (a > b) {
firstnum = num[a] * 10 + num[b];
} else {
continue;
}
secondnum = 0;
for (int c = 4; c >= 0; c--) {
if (num[c] == num[a] || num[c] == num[b]) {
continue;
} else {
secondnum = secondnum * 10 + num[c];
}
}
result = firstnum * secondnum;
String s =" "+firstnum +"*"+secondnum;
map.put(result, s);
if (finalresult < result) {
finalresult = result;
} }
}
System.out.println("最终结果:" + map.get(finalresult)+ "="
+ finalresult);
}
public static void main(String[] args) {
int[] num = { 5, 6, 7, 8, 9 };
int length = num.length;
int firstnum = 0;
int secondnum = 0;
int result = 0;
int finalresult = 0;
Map< Integer, String> map= new HashMap<Integer, String>();
for (int i = 0; i < 5; i++) {
firstnum = num[i];
secondnum = 0;
for (int j = 4; j >= 0; j--) {
if (num[j] == firstnum) {
continue;
} else {
secondnum = secondnum * 10 + num[j];
result = firstnum * secondnum;
String s =" "+firstnum +"*"+secondnum;
map.put(result, s);
}
}
if (finalresult < result) {
finalresult = result;
System.out.println(firstnum + "*" + secondnum + "=" + result);
} } for (int a = 0; a < length; a++) {
for (int b = 0; b < length; b++) {
if (a < b) {
firstnum = num[b] * 10 + num[a];
} else if (a > b) {
firstnum = num[a] * 10 + num[b];
} else {
continue;
}
secondnum = 0;
for (int c = 4; c >= 0; c--) {
if (num[c] == num[a] || num[c] == num[b]) {
continue;
} else {
secondnum = secondnum * 10 + num[c];
}
}
result = firstnum * secondnum;
String s =" "+firstnum +"*"+secondnum;
map.put(result, s);
if (finalresult < result) {
finalresult = result;
} }
}
System.out.println("最终结果:" + map.get(finalresult)+ "="
+ finalresult);
}
* 6、有A、B、C、D和E共5所学校。在一次检查评比中,已知E肯定不是第2或第3名,他们互相进行推测,A校有人说,E校肯定是第1名;B校有人说,
* 我校可能是第2名
* ;C校有人说,A校最差;D校有人说,C校不是最好;E校有人说,D校会获得第一名。结果只有第一名和第二名的学校的人猜对了。编程指出这5所学校的名词。
*
*/
public class Test016 { public static void main(String[] args) {
int[][] arr = getArr();
ranking(arr);
} static int[][] getArr() {
int[][] arr = new int[5][5];
boolean[] booleanArr;
// 探测法,每次认为2个人说真话
for (int i = 0; i < 5; ++i) {
booleanArr = new boolean[5];
booleanArr[i] = true;
for (int j = i + 1; j < 5; ++j) {
booleanArr[j] = true;
if (check(booleanArr, arr)) {
//因为本题只会有唯一答案,所以找到就可以返回了
return arr;
}
booleanArr[j] = false;
}
}
return arr;
} static boolean check(boolean[] booleanArr, int[][] arr) {
//判断条件
arr[0][4] = booleanArr[0] ? 1 : 0;
arr[1][1] = booleanArr[1] ? 1 : 0;
arr[4][0] = booleanArr[2] ? 1 : 0;
arr[0][2] = booleanArr[3] ? 0 : 1;
arr[0][3] = booleanArr[4] ? 1 : 0;
boolean result = true;
for (int i = 0; i < 2; ++i) {
int count = 0;
for (int j = 0; j < arr.length; ++j) {
//每个名次只有一个学校,并且前2名学校的人说的话与其学校名次匹配才为真
if (arr[i][j] == 1) {
result &= booleanArr[j];
++count;
}
}
result &= (count == 1);
}
return result;
} static void ranking(int[][] arr) {
char[] rank = new char[5];
//根据题意,在这里可以获取A,B,C的名次
for (int i = 0; i < arr.length; ++i) {
for (int j = 0; j < arr.length; ++j) {
if (arr[i][j] == 1) {
rank[i] = (char) ('A' + j);
}
}
}
//获取E的名次
if(rank[0] != '\0' && rank[4] != '\0') {
rank[3] = 'E';
} else if(rank[0] != '\0' && rank[3] != '\0') {
rank[4] = 'E';
}
else if(rank[3] != '\0' && rank[4] != '\0') {
rank[0] = 'E';
}
//剩下的就是D的名次
for(int i = 0;i < rank.length;++i) {
if(rank[i] == '\0') {
rank[i] = 'D';
}
}
System.out.println(Arrays.toString(rank));
}
}
{
//oneBody 为 那五个人(A B C D E)
// 已知E肯定不是第2或第3名,
// E!=2&&E!=3
// 五层循环,且各元素都不相同时,验证五个人说的话
//A校有人说,E校肯定是第1名; e=1;(a!=1)
//B校有人说,我校可能是第2名;b=2;(b!=1)
//C校有人说,A校最差; a=5;
//D校有人说,C校不是最好;c!=1
//E校有人说,D校会获得第一名。 d=1;
boolean res ;
//两个正确,三个错误
//下面是五个人的猜测
switch(oneBody)
{
case 'A':
res = ( a[0]== 'E');
break;
case 'B':
res = (a[1] == 'B');
break;
case 'C':
res = (a[4] == 'A');
break;
case 'D':
res = (a[0] != 'C');
break;
case 'E':
res = (a[0] == 'D');
break;
default:
res = false;
}
return res;
}
public static void main(String[] args)
{
char[] a = {'A','B','C','D','E'}; //初始化
//a[0]代表第一名
//a[1]代表第二名
//a[2]代表第三名
//a[3]代表第四名
//a[4]代表第五名
//五层循环,且各元素都不相同时,验证五个人说的话
for(a[0] = 'A'; a[0] <= 'E'; ++ a[0] )
{
for(a[1] = 'A' ; a[1] <= 'E'; ++ a[1] )
{
if(a[1] != a[0])
{
for(a[2] = 'A' ; a[2] <= 'E'; ++ a[2] )
{
if((a[2]!= a[1] ) && (a[2] != a[0]))
{
for(a[3] = 'A' ; a[3] <= 'E'; ++ a[3] )
{
if((a[3] != a[2]) && (a[3] != a[1]) && (a[3] != a[0] ))
{
for(a[4] = 'A' ; a[4] <= 'E'; ++ a[4] )
{
if((a[4]!= a[3]) && (a[4] != a[2] ) && (a[4] != a[1]) && (a[4] != a[0]))
{
//只有第一第二为真,其它人为假,并且E不是第二也不是第三
if(isTrue(a[0],a) && isTrue(a[1],a)&&!isTrue(a[2], a)&&!isTrue(a[3], a)&&!isTrue(a[4], a)&&(a[1] != 'E' && a[2] != 'E'))
{
System.out.printf("排名为:%c %c %c %c %c\n ",a[0],a[1],a[2],a[3],a[4]);
}
}
}
}
}
}
}
} }
}