最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言趣味編程之平分七筐魚

 更新時間:2021年11月25日 17:23:12   作者:小輝_Super  
這篇文章介紹了C語言趣味編程之平分七筐魚,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

題目描述

甲、乙、丙三位漁夫出海打魚,他們隨船帶了21只籮筐。當(dāng)晚返航時,他們發(fā)現(xiàn)有7筐裝滿了魚,還有7筐裝了半筐魚,另外7筐則是空的,由于他們沒有秤,只好通過目測認(rèn)為7個滿筐魚的重量是相等的,7個半筐魚的重量是相等的。在不將魚倒出來的前提下,怎樣將魚平分為3份?

分析

這題還有兩個隱形要求:三個人分得的籮筐數(shù)量相同(7只);列出所有的平分方法。

我的思路(參照網(wǎng)上他人方法)

首先,所有的魚所占的籮筐數(shù)為7+7*0.5=10.5只(7只滿筐和7只半筐),將它們平分成3份,那么每個人就能分到3.5只裝滿魚的籮筐(例如3只滿筐和1只半筐或者1只滿筐5只半筐等等)。

我們可以先遍歷出甲分到的裝滿魚的籮筐數(shù),然后再遍歷出乙分到的裝滿魚的籮筐數(shù),丙的滿筐魚籮筐數(shù)則為7-甲乙的滿筐魚的籮筐數(shù)之和。由于最后每個人都能分到3.5筐魚,所以他們最多可分配3只裝滿魚的籮筐。

確定完他們的滿筐魚籮筐數(shù)之后,接著遍歷甲乙分到的半筐魚籮筐數(shù),丙分到的半筐魚籮筐數(shù)則等于7-甲乙的半筐魚的籮筐數(shù)之和。由于目前他們分到的滿筐魚的籮筐數(shù)為整數(shù),而最終他們都必須分得3.5筐魚,所以每個人至少要分到一只裝有半筐魚的籮筐,且一定是奇數(shù)只。

在分配完半筐魚的籮筐后,如果每個人所分到的魚的籮筐數(shù)為3.5(其實判斷甲乙即可),那么說明該分配方式符合條件。

最后,每個人空筐的籮筐數(shù)=7-該人的滿筐魚籮筐數(shù)-該人的半筐魚籮筐數(shù)。

我的代碼還有一些可優(yōu)化的地方(可以刪去一些無效的循環(huán)次數(shù)),在網(wǎng)上參考部分有一個很不錯的例子(我的思路和代碼就參考了該例子)。

代碼實現(xiàn)

#include <stdio.h>

int main()
{
    //甲乙丙分得的不同類型籮筐數(shù)量
    int fish_nums[3][3] = {0};
    int i = 0, j = 0, k = 0, m = 0, n = 0;

    //甲分滿籮筐,最大3筐
    for(i = 0; i <= 3; i++)
    {
        fish_nums[0][0] = i; //甲分得滿籮筐數(shù)
        //乙分滿籮筐,最大三筐
        for(j = 0; j <= 3; j++)
        {
            fish_nums[1][0] = j;         //乙分得滿籮筐數(shù)
            fish_nums[2][0] = 7 - i - j; //丙分得滿籮筐數(shù)
            if(fish_nums[2][0] > 3)
                continue;                //超過3.5框

            //甲分奇數(shù)個半籮筐,最少1個,最多5個(其他人也要分)
            for(k = 1; k <= 5; k+=2)
            {
                if(fish_nums[0][0] + 0.5 * k == 3.5)
                    break;
            }
            fish_nums[0][1] = k;         //甲分得半籮筐數(shù)

            //乙分奇數(shù)個半籮筐,最少1個,最多5個(其他人也要分)
            for(m = 1; m <= 5; m+=2)     //乙分奇數(shù)個半籮筐
            {
                if(fish_nums[1][0] + 0.5 * m == 3.5)
                    break;
            }
            fish_nums[1][1] = m;         //乙分得半籮筐數(shù)
            fish_nums[2][1] = 7 - k - m; //丙分得半籮筐數(shù)

            //甲分得空籮筐數(shù)
            fish_nums[0][2] = 7 - fish_nums[0][0] - fish_nums[0][1];
            //乙分得空籮筐數(shù)
            fish_nums[1][2] = 7 - fish_nums[1][0] - fish_nums[1][1];
            //丙分得空籮筐數(shù)
            fish_nums[2][2] = 7 - fish_nums[2][0] - fish_nums[2][1];

            //打印匹配的結(jié)果
            for(n = 0; n < 3; n++)
            {
                if(n == 0)
                    printf("甲——");
                else if(n == 1)
                    printf("乙——");
                else printf("丙——");
                printf("滿筐:%d,半筐:%d,空筐:%d\n", fish_nums[n][0],\
                        fish_nums[n][1], fish_nums[n][2]);
                if(n == 2)
                    printf("-------------------------------------\n");
            }
        }
    }
    return 0;
}

運行結(jié)果

由于我考慮了針對甲乙丙三個不同的人的分法,所以最后結(jié)果有6個,如果不考慮三個人的身份,那么分法還需要除以3,即只有2種(具體代碼可以參考下文的網(wǎng)上參考部分)

網(wǎng)上參考

原文鏈接:http://c.biancheng.net/cpp/html/3370.html

核心思路

  • (1) 數(shù)組的每行或每列的元素之和都為7。
  • (2) 對數(shù)組的行來說,滿筐數(shù)加半筐數(shù)=3.5。
  • (3) 每個人所得的滿筐數(shù)不能超過3筐。
  • (4) 每個人都必須至少有1個半筐,且半筐數(shù)一定為奇數(shù)。
#include<stdio.h>
int a[3][3], count;
int main()
{
    int i, j, k, m, n, flag;
    printf("It exists possible distribtion plans:\n");
    for(i=0; i<=3; i++)  /*試探第一個人滿筐a[0][0]的值,滿筐數(shù)不能>3*/
    {
        a[0][0]=i;
        for(j=i; j<=7-i&&j<=3; j++)  /*試探第二個人滿筐a[1][0]的值,滿筐數(shù)不能>3*/
        {
            a[1][0]=j;
            if((a[2][0]=7-j-a[0][0])>3)
                continue;  /*第三個人滿筐數(shù)不能>3*/
            if(a[2][0]<a[1][0])
                break;  /*要求后一個人分的滿筐數(shù)大于等于前一個人,以排除重復(fù)情況*/
            for(k=1; k<=5; k+=2)  /*試探半筐a[0][1]的值,半筐數(shù)為奇數(shù)*/
            {
                a[0][1]=k;
                for(m=1; m<7-k; m+=2)  /*試探半筐a[1][1]的值,半筐數(shù)為奇數(shù)*/
                {
                    a[1][1]=m;
                    a[2][1]=7-k-m;
                    /*判斷每個人分到的魚是 3.5筐,flag為滿足題意的標(biāo)記變量*/
                    for(flag=1,n=0; flag&&n<3; n++)
                        if(a[n][0]+a[n][1]<7&&a[n][0]*2+a[n][1] == 7)
                            a[n][2]=7-a[n][0]-a[n][1];  /*計算應(yīng)得到的空筐數(shù)量*/
                        else
                            flag=0;  /*不符合題意則置標(biāo)記為0*/
                    if(flag)
                    {
                        ++count;
                        printf("No.%d Full basket Semi-basket Empty\n", count);
                        for(n=0; n<3; n++)
                            printf(" fisher %c: %d %d %d\n",'A'+n, a[n][0], a[n][1], a[n][2]);
                    }
                }
            }
        }
    }
    return 0;
}

原文結(jié)果:

以上所述是小編給大家介紹的C語言趣味編程之平分七筐魚,希望對大家有所幫助。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C++中based for循環(huán)的實現(xiàn)

    C++中based for循環(huán)的實現(xiàn)

    C++中的范圍for循環(huán)是一種簡潔的遍歷容器的方法,本文主要介紹了C++中based for循環(huán)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • C語言柔性數(shù)組實例詳解

    C語言柔性數(shù)組實例詳解

    這篇文章主要介紹了C語言柔性數(shù)組,通過實例分析了不完整類型、結(jié)構(gòu)體及柔性數(shù)組等概念,需要的朋友可以參考下
    2014-09-09
  • qt獲取當(dāng)前時間(QDateTime、QTime、QDate)

    qt獲取當(dāng)前時間(QDateTime、QTime、QDate)

    本文主要介紹了qt獲取當(dāng)前時間(QDateTime、QTime、QDate),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • OpenCV利用霍夫變換實現(xiàn)交通車道線檢測

    OpenCV利用霍夫變換實現(xiàn)交通車道線檢測

    經(jīng)典霍夫變換用來檢測圖像中的直線,后來霍夫變換經(jīng)過擴展可以進(jìn)行任意形狀物體的識別,例如圓和橢圓。本文就來利用霍夫變換實現(xiàn)交通車道線檢測,需要的可以參考一下
    2022-09-09
  • c++帶有string的結(jié)構(gòu)體賦值和清零問題

    c++帶有string的結(jié)構(gòu)體賦值和清零問題

    這篇文章主要介紹了c++帶有string的結(jié)構(gòu)體賦值和清零問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • C++11中跳轉(zhuǎn)initializer_list實現(xiàn)分析

    C++11中跳轉(zhuǎn)initializer_list實現(xiàn)分析

    這篇文章主要介紹了C++11中跳轉(zhuǎn)initializer_list實現(xiàn)分析,實例分析initializer_list<T>初體驗,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Effective C++ 入門學(xué)習(xí)筆記

    Effective C++ 入門學(xué)習(xí)筆記

    這篇文章主要介紹了Effective C++ 入門學(xué)習(xí)筆記,需要的朋友可以參考下
    2023-08-08
  • c語言中聯(lián)合體和枚舉用法詳解

    c語言中聯(lián)合體和枚舉用法詳解

    結(jié)構(gòu)體、聯(lián)合體是C語言中的構(gòu)造類型,結(jié)構(gòu)體我們平時應(yīng)該都用得很多,下面這篇文章主要給大家介紹了關(guān)于c語言中聯(lián)合體和枚舉用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • C語言中順序棧和鏈棧的定義和使用詳解

    C語言中順序棧和鏈棧的定義和使用詳解

    這篇文章主要為大家詳細(xì)介紹了C語言中順序棧和鏈棧的定義和使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定的幫助,感興趣的小伙伴可以了解一下
    2022-10-10
  • ubuntu20.04中vscode使用ROS的詳細(xì)方法

    ubuntu20.04中vscode使用ROS的詳細(xì)方法

    這篇文章主要介紹了ubuntu20.04?vscode使用ROS的詳細(xì)方法,主要包括在vscode安裝擴展創(chuàng)建工作文件夾的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10

最新評論

安国市| 荆门市| 丰都县| 英超| 塘沽区| 神池县| 社旗县| 潞西市| 太康县| 珠海市| 西和县| 扶绥县| 清河县| 车致| 金秀| 南投县| 肇东市| 巩留县| 高州市| 乡城县| 电白县| 抚松县| 新化县| 皋兰县| 万源市| 保山市| 洛隆县| 门头沟区| 浦城县| 广昌县| 泗阳县| 襄汾县| 隆子县| 唐山市| 广河县| 隆林| 江北区| 兴宁市| 甘孜县| 普兰县| 原阳县|