求一个算法!!

20000块钱 69个人分 求几天 每个人分多少钱 必须是整数!!

[code="java"]
public class SuanFa {

public static void main(String[] args) {
    //m为钱的总数
    int m = 20000;
    //p为参与分钱的总人数
    int p = 69;
    //per为每人每天可以分到的钱数
    int per;
    //s为返回的天数
    int s;
    //z为已经分掉的钱数
    int z=0;
    //last最终剩余钱数
    int last1 = m/p;//一天将钱分完每人可以分多少其实一天将钱分完是最优解决方案之一
    //last最终剩余钱数
    int last = m-last1*p;
    System.out.println("........."+last+"。。。。");
    //自由变量
    int i= 0;
    for (per =1;per < last1; per++) {
    s=m/(per*p);
    int last2 = m-s*per*p;
    int last3 = m-(s+1)*per*p;
    //-10为如果超出钱数为最小时
    if(last2==last||last3==-10){
        i++;
        System.out.println("第"+i+"种解决方案");
    int pers = (m-(s-1)*per*p)/p;
    System.out.println("最终剩余钱数:"+(m-((s-1)*per*p+pers*p)));
    System.out.println("总钱数为:"+m);
    System.out.println("参与分钱的人数为:"+p);
    System.out.println("每人每天可以分到的钱数:"+per);
    System.out.println("第"+s+"天每人能拿到的钱数为:"+pers);
    System.out.println("分钱所用的总天数:"+s);
    }

}   
    System.out.println("共"+i+"种解决方案");
}

}
//如果钱不能被人数整除分多少天也不会把钱平分成整数。
//但是算法还是有的就是使最后钱有剩余尽量使剩余达到最小。
//分钱每天能拿到per元的只有s-2天最后一天大家只能拿到pers元。
//你还有什么不懂得还可以在和我说。
[/code]

求几天?什么意思?

不是很明白楼主的意思唉,楼主你能说的再明白点不?

20000整除不了69 死套的程序如下

final int s=20000,p=69;
int m=s/p;
int a,d;
int i=1;
for(;;){
a=i++;
if(m%a!=0)continue;
d=m/a;
System.out.println(a+"*"+d);
if(i>=m)break;
}

人和天数也必须是整数吧 20000的因数中没有69 这不可能实现

楼主的意思是说每个人每天分多少钱,到钱分完之后每个人拿的钱总数是整数是吧?以天为单位算的,天肯定是整数!

那每人每天分的钱数是不是要求是平均的呀。。

天数 跟 钱数 都是变量 弄两个循环去循环判断吧 机器肯定给你算出来 :D

死局,算不出来

到最后每个分分的钱肯定不是一样的啊

目标是什么?把钱分完?不差钱?

如果每天都是69个人去分的话,这肯定无解。
每天分钱的人数应该不是一样多吧!

8) 这个问题很简单...算法就是...
[quote]
public class SuanFa {

public static void main(String[] args) {
    //m为钱的总数
    int m = 20000;
    //p为参与分钱的总人数
    int p = 69;
    //per为每人每天可以分到的钱数
    int per;
    //s为返回的天数
    int s;
    //z为已经分掉的钱数
    int z=0;
    //last最终剩余钱数
    int last1 = m/p;//一天将钱分完每人可以分多少其实一天将钱分完是最优解决方案之一
    //last最终剩余钱数
    int last = m-last1*p;
    System.out.println("........."+last+"。。。。");
    //自由变量
    int i= 0;
    for (per =1;per < last1; per++) {
    s=m/(per*p);
    int last2 = m-s*per*p;
    int last3 = m-(s+1)*per*p;
    //-10为如果超出钱数为最小时
    if(last2==last||last3==-10){
        i++;
        System.out.println("第"+i+"种解决方案");
    int pers = (m-(s-1)*per*p)/p;
    System.out.println("最终剩余钱数:"+(m-((s-1)*per*p+pers*p)));
    System.out.println("总钱数为:"+m);
    System.out.println("参与分钱的人数为:"+p);
    System.out.println("每人每天可以分到的钱数:"+per);
    System.out.println("第"+s+"天每人能拿到的钱数为:"+pers);
    System.out.println("分钱所用的总天数:"+s);
    }

}   
    System.out.println("共"+i+"种解决方案");
}

}
//如果钱不能被人数整除分多少天也不会把钱平分成整数。
//但是算法还是有的就是使最后钱有剩余尽量使剩余达到最小。
//分钱每天能拿到per元的只有s-2天最后一天大家只能拿到pers元。
//你还有什么不懂得还可以在和我说。
[/quote]

我急切要求楼主能够把这个问题解释一下!愿意到底是什么?

我看你的意思是说,无论多少天,最后69个人平均非配2000,而且又是整数,这是不可能的!

还有一个问题,那就是不管怎样做,应该考虑这个问题,那就是1.1天也是两天,1.2天也是两天,如果用钱数/人数/天数,这个天数应该是一天内的任何时刻。

lz根本就没有描述清除这个问题,没法解,如果要天数和每天多少钱均为整数,那就没解。lz自己想吧....

什么依稀啊 :o

换成港币,就可以整除了

利用随机数来分

换成美元分

真不知道什么意思

兰州烧饼?

8) ?

:oops: :arrow:

:cry: 可能

[b]几[/b][i]天[/i][u]是[/u][quote]什么[/quote][code="java"]意思[/code][b]?[/b]
[code="java"]<?php
echo 'hi';
?>[/code]
[code="java"]

学习一下

[/code]

[code="java"]int a = 0;[/code]

不知道你这个题目是哪里的,只能告诉你这是一个二元一次方程,而且按照那两个条件的话是无解的。方程:69xy=20000;x为每天分的钱数,y为天数。
程序:
[code="java"]
int m = 20000;
int p = 69;
for (int x = 1; x < m / p; x++) {
for (int y = 1; y < m / p; y++) {
if (m - p * x * y < 100 && m - p * x * y > 0) {
System.out.println(x+"天, 每人平均分了"+y+", 总共分了"+p * x * y+" 还剩" + (m - p * x * y));
}
}
}
[/code]
结果:17天, 每人平均分了17, 总共分了19941 还剩59

[code="java"]
1.dddd
2.aaa
3.dsss
[/code]

这道题中是不能出现“平均”这个次的,以为根本就无法平均的!