| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3383 人关注过本帖
标题:工地搬砖问题
只看楼主 加入收藏
黑暗骑士5D
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2019-11-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
工地搬砖问题
这是中国古典算术问题,某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。有多少种搬法用N人正好搬N块砖?

输入格式:
在一行内输出正整数N(N<500)

输出格式:
输出所有满足条件的搬法,每种搬法占一行。

每行按如下格式依次输出该搬法中男人、女人、小孩的人数,按男人人数的递增顺序输出,中间用空格间隔(=前后没有多余的空格,行末也无空格)。

men=男人数 women=女人数 child=小孩数

若没有满足条件的搬法,则输出"No solution!"

输入样例1:
45
输出样例1:
men=0 women=15 child=30
men=3 women=10 child=32
men=6 women=5 child=34
men=9 women=0 child=36
输入样例2:
1
输出样例2:
No solution!
搜索更多相关主题的帖子: 输入 空格 格式 输出 男人 
2019-11-30 13:37
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:5 
程序代码:
#include<stdio.h>

 
int main()
{
    int N;
    int i,j,k;
    int flag = 0;
    scanf("%d", &N);
    for(i=0; i<=N/3; i++){
        for(j=0; j<=N/2; j++){
            for(k=0; k<=N; k+=2){
                if((i+j+k == N) && (3*i+2*j+k/2==N)){
                    flag =1;
                    printf("men=%d women=%d child=%d\n", i, j, k);
                }
            }
        }
    }
    if(flag == 0) printf("No solution!\n");
    return 0;
}
2019-11-30 16:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
化简后是 5a+3b=n,求其通项公式。
方法搜 扩展欧几里得
2019-11-30 18:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
5a+3b=45
2a+3(a+b)=45
2(2a+b)+(a+b)=45
(2a+b)+(3a+2b)=45

令2a+b=0,则3a+2b=45。解得a=-45
a=–45+3i
即a=0+3i
即a=0, 3, 6, 9, ……

手机打字,输入太慢
2019-11-30 18:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
先输入n
求 (3-n%3)%3 得到第一个a,此后a每次增加3
b是(n–5a)/3
c是n-a–b
2019-11-30 18:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
// a = +3*i-1*n, i>=(n+2)/3
// b = -5*i+2*n, i<=(2*n)/5
// c = +2*i+0*n, i>=0

#include <stdio.h>

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    unsigned begin=(n+2)/3, end=(2*n)/5;
    if( begin > end )
        puts( "No solution!" );
    else
    {
        for( unsigned i=begin; i<=end; ++i )
            printf( "men=%u women=%u child=%u\n", +3*i-1*n, -5*i+2*n, +2*i+0*n );
    }
}
2019-12-02 09:07
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
在这个问题里面,它是一道编程问题,如果将它转化为数学问题的话,就是解一个如下的三元一次方程(前提是确定了需要搬运的砖石总数,这里假设为45):
3*men+2*women+0.5*child=45
计算men women child的整数解。
知道了这些,编程就容易多了。
2019-12-03 20:15
快速回复:工地搬砖问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022686 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved