JAVA思维题 java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 40分入账public class HowManyHorses { public static void main(String[] args) { final int HORSE_NUMBER = 100; final int FOOD_NUMBER = 100; for (int bigHorseNumber = 0; bigHorseNumber <= HORSE_NUMBER; bigHorseNumber++) { for (int smallHorseNumber = 0; smallHorseNumber <= HORSE_NUMBER; smallHorseNumber++) { for (int ponyNumber = 0; ponyNumber <= HORSE_NUMBER; ponyNumber++) { if (bigHorseNumber + smallHorseNumber + ponyNumber == HORSE_NUMBER && ponyNumber % 2 == 0 && bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOOD_NUMBER) { System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber); } } } } }}输出:2 30 685 25 708 20 7211 15 7414 10 7617 5 7820 0 80 public class HowManyHorses { public static void main(String[] args) { final int HORSE_NUMBER = 100; final int FOODS_NUMBER = 100; for (int bigHorseNumber = 0; bigHorseNumber <= ( HORSE_NUMBER / 3 + 1 ); bigHorseNumber++) { for (int smallHorseNumber = 0; smallHorseNumber <= (HORSE_NUMBER / 2 + 1); smallHorseNumber++) { for (int ponyNumber = 0; ponyNumber <= HORSE_NUMBER; ponyNumber++) { if (bigHorseNumber + smallHorseNumber + ponyNumber == HORSE_NUMBER && bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOODS_NUMBER && ponyNumber % 2 == 0) { System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber); } } } } }}优化了一下循环的终止条件,减少了一些循环次数 其实就是根据数学方程式然后转换成Java中的循环问题,楼主理解一下题目,然后理一下思绪就可以了,还是不难的。 下面是代码,就100左右的规模也没啥优化的必要,直接三重循环了。结果貌似底下这样:da is2 xiao is30 zai is68da is5 xiao is25 zai is70da is8 xiao is20 zai is72da is11 xiao is15 zai is74da is14 xiao is10 zai is76da is17 xiao is5 zai is78public class Horse { public static void main(String[] args) { // TODO Auto-generated method stub int da = 0; int xiao = 0; int zai = 0; for(da = 1; da < 100; ++ da) { for(xiao = 1; xiao < 100; ++xiao) { for(zai = 1; zai < 100; ++zai) { if(da * 3 + xiao * 2 + zai / 2 == 100 && da + xiao + zai == 100 && zai % 2 == 0) { System.out.println("da is" +da +" xiao is" + xiao + " zai is" + zai); } } } } }} 用两个循环就可以了ponyNumber =HORSE_NUMBER -bigHorseNumber -smallHorseNumber public static void main(String[] args) { final int HOURSE_COUNT = 100; int RICE_COUNT = 100; for (int i=0;i<=HOURSE_COUNT;i++){ for (int j = 0; j <= HOURSE_COUNT; j++) { if((HOURSE_COUNT-(i+j))%2 != 0){ continue; }else if(3*i+j*2 + (HOURSE_COUNT-(i+j))/2 == RICE_COUNT){ System.out.println("大马="+i+"\n小马="+j+"\n小马仔="+ (100-i-j)+"\n\n"); } } } } 大马x,小马y,先获得二元一次方程5x + 3y = 100的整数解马崽就是 100 - x - y代码:class horse{ public static void main(String args[]){ int i, j; for(i = 0; i < 20; i++){ for(j = 0; j < 32; j++){ if((5 * i + 3 * j) == 100) System.out.println("big:" + i + ",small: " + j + ",young:" + (100 - i - j)); } } }}解有以下几组:大马 小马 马崽2, 30, 685,25,708,20,7211,15,7414,10,7617,5,78 如果可以为0的话,代码为class horse{ public static void main(String args[]){ int i, j; for(i = 0; i <= 20; i++){ for(j = 0; j <= 32; j++){ if((5 * i + 3 * j) == 100) System.out.println("big:" + i + ",small: " + j + ",young:" + (100 - i - j)); } } }}解有以下几组:大马 小马 马崽2, 30, 685,25,708,20,7211,15,7414,10,7617,5,78 20,0,80 原谅我只会方程式x + y + z = 1003x + 2y + 1/2 z = 100 用两个循环就可以了ponyNumber =HORSE_NUMBER -bigHorseNumber -smallHorseNumber public class HowManyHorses2Loops { public static void main(String[] args) { final int HORSE_NUMBER = 100; final int FOODS_NUMBER = 100; for (int bigHorseNumber = 0; bigHorseNumber <= HORSE_NUMBER / 3 + 1; bigHorseNumber++) { for (int smallHorseNumber = 0; smallHorseNumber <= HORSE_NUMBER / 2 + 1; smallHorseNumber++) { int ponyNumber = HORSE_NUMBER - bigHorseNumber - smallHorseNumber; if (bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOODS_NUMBER && ponyNumber % 2 == 0) { System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber); } } } }}多谢提示 这有点像蓝桥杯的题目,java趣味编程,顶二楼的代码 public static void main(String args[]){ System.out.println(System.currentTimeMillis()); for(int i=0;i<34;i++){ for(int j=0;j<51;j++){ if(((HORSE_COUNT-(i+j)) % 2) ==0){ if((i*3 + j*2 +(HORSE_COUNT-(i+j)) /2)==RICE_NUMBER){ System.out.println("大马"+i+" 小马:"+j+" 小马仔:"+(HORSE_COUNT-(i+j))); } } } } System.out.println(System.currentTimeMillis()); } public static void main(String args[]){ System.out.println(System.currentTimeMillis()); for(int i=0;i<34;i++){ for(int j=0;j<51;j++){ if(((HORSE_COUNT-(i+j)) % 2) ==0){ if((i*3 + j*2 +(HORSE_COUNT-(i+j)) /2)==RICE_NUMBER){ System.out.println("大马"+i+" 小马:"+j+" 小马仔:"+(HORSE_COUNT-(i+j))); } } } } System.out.println(System.currentTimeMillis()); } 请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1 请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1理论上的极值,100/3 ,100/2 不是bigHorseNumber <= HORSE_NUMBER / 3,就可以了么,+1是为什么 代码里for循环各个变量的上限可以小改一下啦,没必要都用100作为上限 请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1请教一下为什么条件是 HORSE_NUMBER / 3 + 1,HORSE_NUMBER / 2 + 1),为什么要加1个人感觉上面的代码有点小瑕疵,因为循环中应该用FOODS_NUMBER/3来算吧,这里正好两个值是一样的。条件设置成FOODS_NUMBER/3+1是因为大马驮食物的数量不能大于食物的总数。加1是为了保证不漏掉一次循环,因为100/3的话是33.333,但是会直接取33次,加1到34次保证不会漏掉。 //x + y + z = 100 -> 4x+4y=400-4z ----|//3x + 2y +z/2 = 100 -> 6x+4y=200-z --|-->2x =-200+ 3zpublic class Horse{ public static void main(String[] args) { int x = 0; int y = 0; System.out.println("大\t小\t幼"); for(int z = 2 ; z <= 100 ;z+=2){ x = (-200+3*z)/2; y = 100 -x -z; if(x < 0 || y < 0){ continue; } System.out.println(x+"\t"+y+"\t"+z); } }}---------------------------大 小 幼2 30 685 25 708 20 7211 15 7414 10 7617 5 7820 0 80 for(x = 1;x<=34;x++){for(y=1;y<=50;y++){z = 100-x-y;if(z%2 = =0&&3x+2y+z/2=100){System.out.print(x,y,z);}}} 快来围观被大神!公式:3x + 2y + z/2 = 100x + y + z = 100z%2 = 0化简得:5x + 3y = 100z % 2 = 0public class CalculateHorses { public static void main(String[] args) { for(int x = 0; x <= 20; x++) { int t = 100 - 5 * x; if(t%3 == 0) { int y = t/3; int z = 100 - x - y; if(z%2 == 0) { System.out.println(x + ", " + y + ", " + z); } } } }} public static void main(String[] args) { int x=0;//大 int y=0;//中 int z=0;//小 while(true){//先假设都是大的 if(3*x>100){ break; } x++; } while(true){ x--;//每次减一个大的,判断中跟小,如果中和小能匹配出3x+2y+0.5z=100&&x+y+z=100;结束 y=0;//剩下的中跟小的和是100-x假设中=0;小=100-x然后循环y++,z--.出结果就打印 z=100-x; while(true){ if((3*x+2*y+0.5*z)==100 && (x+y+z)==100){ System.out.println(x+","+y+","+z); } if(z==0){ break; } y++; z--; } if(x==0){ break; } } } public class helloworld { public static void main(String args[]) { for(int x=0; x<100; x++) for(int y = 0; y<100; y++) for(int z=0; z<100; z++) { if((x+y+z==100)&&(3*x+2*y+z/2==100)&&(z%2==0)) { System.out.println("x: "+x+"\ny: "+y+"\nz: "+z); } } } }x: 2y: 30z: 68x: 5y: 25z: 70x: 8y: 20z: 72x: 11y: 15z: 74x: 14y: 10z: 76x: 17y: 5z: 78x: 20y: 0z: 80我这个好复杂最简单的想法 为什么我tomcat运行是总是说 没有内部命令或外部命令··· 为什么在JCreator可以运行的程序但在控制台下不能运行? JTree控件怎么样增加多个根选项 java如何修改ini文件的某个值? 新手想解决一个简单的程序 用jcreator遇到的问题,请问怎么解决 简直好菜 怎样模拟实现传递基本数据类型的引用 c# 与 java 哪个更有钱前途????????????????????????? 我faint…… 求助:dom4j怎么读取xml中的注释? 各位java精英们。请教个问题。【反射机制】
public static void main(String[] args) {
final int HORSE_NUMBER = 100;
final int FOOD_NUMBER = 100;
for (int bigHorseNumber = 0; bigHorseNumber <= HORSE_NUMBER; bigHorseNumber++) {
for (int smallHorseNumber = 0; smallHorseNumber <= HORSE_NUMBER; smallHorseNumber++) {
for (int ponyNumber = 0; ponyNumber <= HORSE_NUMBER; ponyNumber++) {
if (bigHorseNumber + smallHorseNumber + ponyNumber == HORSE_NUMBER &&
ponyNumber % 2 == 0 &&
bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOOD_NUMBER) {
System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber);
}
}
}
}
}
}
输出:
2 30 68
5 25 70
8 20 72
11 15 74
14 10 76
17 5 78
20 0 80
public static void main(String[] args) {
final int HORSE_NUMBER = 100;
final int FOODS_NUMBER = 100;
for (int bigHorseNumber = 0; bigHorseNumber <= ( HORSE_NUMBER / 3 + 1 ); bigHorseNumber++) {
for (int smallHorseNumber = 0; smallHorseNumber <= (HORSE_NUMBER / 2 + 1); smallHorseNumber++) {
for (int ponyNumber = 0; ponyNumber <= HORSE_NUMBER; ponyNumber++) {
if (bigHorseNumber + smallHorseNumber + ponyNumber == HORSE_NUMBER
&& bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOODS_NUMBER
&& ponyNumber % 2 == 0) {
System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber);
}
}
}
}
}
}优化了一下循环的终止条件,减少了一些循环次数
结果貌似底下这样:
da is2 xiao is30 zai is68
da is5 xiao is25 zai is70
da is8 xiao is20 zai is72
da is11 xiao is15 zai is74
da is14 xiao is10 zai is76
da is17 xiao is5 zai is78
public class Horse { public static void main(String[] args) {
// TODO Auto-generated method stub
int da = 0;
int xiao = 0;
int zai = 0;
for(da = 1; da < 100; ++ da)
{
for(xiao = 1; xiao < 100; ++xiao)
{
for(zai = 1; zai < 100; ++zai)
{
if(da * 3 + xiao * 2 + zai / 2 == 100
&& da + xiao + zai == 100
&& zai % 2 == 0)
{
System.out.println("da is" +da +" xiao is" + xiao + " zai is" + zai);
}
}
}
} }}
ponyNumber =HORSE_NUMBER -bigHorseNumber -smallHorseNumber
final int HOURSE_COUNT = 100;
int RICE_COUNT = 100;
for (int i=0;i<=HOURSE_COUNT;i++){
for (int j = 0; j <= HOURSE_COUNT; j++) {
if((HOURSE_COUNT-(i+j))%2 != 0){
continue;
}else
if(3*i+j*2 + (HOURSE_COUNT-(i+j))/2 == RICE_COUNT){
System.out.println("大马="+i+"\n小马="+j+"\n小马仔="+ (100-i-j)+"\n\n");
}
}
}
}
5x + 3y = 100的整数解
马崽就是 100 - x - y代码:class horse{
public static void main(String args[]){
int i, j;
for(i = 0; i < 20; i++){
for(j = 0; j < 32; j++){
if((5 * i + 3 * j) == 100)
System.out.println("big:" + i + ",small: " + j + ",young:" + (100 - i - j));
}
}
}
}解有以下几组:
大马 小马 马崽
2, 30, 68
5,25,70
8,20,72
11,15,74
14,10,76
17,5,78
public static void main(String args[]){
int i, j;
for(i = 0; i <= 20; i++){
for(j = 0; j <= 32; j++){
if((5 * i + 3 * j) == 100)
System.out.println("big:" + i + ",small: " + j + ",young:" + (100 - i - j));
}
}
}
}解有以下几组:
大马 小马 马崽
2, 30, 68
5,25,70
8,20,72
11,15,74
14,10,76
17,5,78
20,0,80
3x + 2y + 1/2 z = 100
ponyNumber =HORSE_NUMBER -bigHorseNumber -smallHorseNumber
public class HowManyHorses2Loops { public static void main(String[] args) {
final int HORSE_NUMBER = 100;
final int FOODS_NUMBER = 100;
for (int bigHorseNumber = 0; bigHorseNumber <= HORSE_NUMBER / 3 + 1; bigHorseNumber++) {
for (int smallHorseNumber = 0; smallHorseNumber <= HORSE_NUMBER / 2 + 1; smallHorseNumber++) {
int ponyNumber = HORSE_NUMBER - bigHorseNumber - smallHorseNumber;
if (bigHorseNumber * 3 + smallHorseNumber * 2 + ponyNumber / 2 == FOODS_NUMBER && ponyNumber % 2 == 0) {
System.out.println(bigHorseNumber + " " + smallHorseNumber + " " + ponyNumber);
}
}
}
}
}
多谢提示
System.out.println(System.currentTimeMillis());
for(int i=0;i<34;i++){
for(int j=0;j<51;j++){
if(((HORSE_COUNT-(i+j)) % 2) ==0){
if((i*3 + j*2 +(HORSE_COUNT-(i+j)) /2)==RICE_NUMBER){
System.out.println("大马"+i+" 小马:"+j+" 小马仔:"+(HORSE_COUNT-(i+j)));
}
}
}
}
System.out.println(System.currentTimeMillis());
}
System.out.println(System.currentTimeMillis());
for(int i=0;i<34;i++){
for(int j=0;j<51;j++){
if(((HORSE_COUNT-(i+j)) % 2) ==0){
if((i*3 + j*2 +(HORSE_COUNT-(i+j)) /2)==RICE_NUMBER){
System.out.println("大马"+i+" 小马:"+j+" 小马仔:"+(HORSE_COUNT-(i+j)));
}
}
}
}
System.out.println(System.currentTimeMillis());
}
个人感觉上面的代码有点小瑕疵,因为循环中应该用FOODS_NUMBER/3来算吧,这里正好两个值是一样的。
条件设置成FOODS_NUMBER/3+1是因为大马驮食物的数量不能大于食物的总数。加1是为了保证不漏掉一次循环,因为100/3的话是33.333,但是会直接取33次,加1到34次保证不会漏掉。
//3x + 2y +z/2 = 100 -> 6x+4y=200-z --|-->2x =-200+ 3z
public class Horse
{
public static void main(String[] args)
{
int x = 0;
int y = 0;
System.out.println("大\t小\t幼");
for(int z = 2 ; z <= 100 ;z+=2){
x = (-200+3*z)/2;
y = 100 -x -z;
if(x < 0 || y < 0){
continue;
}
System.out.println(x+"\t"+y+"\t"+z);
}
}
}
---------------------------
大 小 幼
2 30 68
5 25 70
8 20 72
11 15 74
14 10 76
17 5 78
20 0 80
for(x = 1;x<=34;x++)
{
for(y=1;y<=50;y++)
{
z = 100-x-y;
if(z%2 = =0&&3x+2y+z/2=100)
{
System.out.print(x,y,z);
}
}
}
快来围观被大神!
公式:
3x + 2y + z/2 = 100
x + y + z = 100
z%2 = 0
化简得:
5x + 3y = 100
z % 2 = 0public class CalculateHorses { public static void main(String[] args) { for(int x = 0; x <= 20; x++) {
int t = 100 - 5 * x;
if(t%3 == 0) {
int y = t/3;
int z = 100 - x - y;
if(z%2 == 0) {
System.out.println(x + ", " + y + ", " + z);
}
}
}
}
}
public static void main(String[] args) {
int x=0;//大
int y=0;//中
int z=0;//小
while(true){//先假设都是大的
if(3*x>100){
break;
}
x++;
}
while(true){
x--;//每次减一个大的,判断中跟小,如果中和小能匹配出3x+2y+0.5z=100&&x+y+z=100;结束
y=0;//剩下的中跟小的和是100-x假设中=0;小=100-x然后循环y++,z--.出结果就打印
z=100-x;
while(true){
if((3*x+2*y+0.5*z)==100 && (x+y+z)==100){
System.out.println(x+","+y+","+z);
}
if(z==0){
break;
}
y++;
z--;
}
if(x==0){
break;
}
}
}
public class helloworld {
public static void main(String args[]) {
for(int x=0; x<100; x++)
for(int y = 0; y<100; y++)
for(int z=0; z<100; z++)
{
if((x+y+z==100)&&(3*x+2*y+z/2==100)&&(z%2==0))
{
System.out.println("x: "+x+"\ny: "+y+"\nz: "+z);
}
}
}
}
x: 2
y: 30
z: 68
x: 5
y: 25
z: 70
x: 8
y: 20
z: 72
x: 11
y: 15
z: 74
x: 14
y: 10
z: 76
x: 17
y: 5
z: 78
x: 20
y: 0
z: 80
我这个好复杂最简单的想法