欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

題目描述

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

分析

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

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

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

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

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

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

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

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

代碼實現

#include <stdio.h>

int main()
{
    //甲乙丙分得的不同類型籮筐數量
    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; //甲分得滿籮筐數
        //乙分滿籮筐,最大三筐
        for(j = 0; j <= 3; j++)
        {
            fish_nums[1][0] = j;         //乙分得滿籮筐數
            fish_nums[2][0] = 7 - i - j; //丙分得滿籮筐數
            if(fish_nums[2][0] > 3)
                continue;                //超過3.5框

            //甲分奇數個半籮筐,最少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;         //甲分得半籮筐數

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

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

            //打印匹配的結果
            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;
}

運行結果

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

網上參考

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

核心思路

  • (1) 數組的每行或每列的元素之和都為7。
  • (2) 對數組的行來說,滿筐數加半筐數=3.5。
  • (3) 每個人所得的滿筐數不能超過3筐。
  • (4) 每個人都必須至少有1個半筐,且半筐數一定為奇數。
#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]的值,滿筐數不能>3*/
    {
        a[0][0]=i;
        for(j=i; j<=7-i&&j<=3; j++)  /*試探第二個人滿筐a[1][0]的值,滿筐數不能>3*/
        {
            a[1][0]=j;
            if((a[2][0]=7-j-a[0][0])>3)
                continue;  /*第三個人滿筐數不能>3*/
            if(a[2][0]<a[1][0])
                break;  /*要求后一個人分的滿筐數大于等于前一個人,以排除重復情況*/
            for(k=1; k<=5; k+=2)  /*試探半筐a[0][1]的值,半筐數為奇數*/
            {
                a[0][1]=k;
                for(m=1; m<7-k; m+=2)  /*試探半筐a[1][1]的值,半筐數為奇數*/
                {
                    a[1][1]=m;
                    a[2][1]=7-k-m;
                    /*判斷每個人分到的魚是 3.5筐,flag為滿足題意的標記變量*/
                    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];  /*計算應得到的空筐數量*/
                        else
                            flag=0;  /*不符合題意則置標記為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;
}

原文結果:

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

相關文章

  • Matlab繪制散點密度圖的教程詳解

    Matlab繪制散點密度圖的教程詳解

    這篇文章主要介紹了如何使用MATLAB繪制散點密度圖(二維核密度),文中的示例代碼講解詳細,對我們學習Matlab有一定幫助,需要的可以參考一下
    2022-02-02
  • C語言中字符串常用操作總結

    C語言中字符串常用操作總結

    C語言是一種非常流行的編程語言,它支持各種數據類型,包括整數、浮點數、字符和字符串等,本文將介紹?C語言中字符串的相關知識,包括字符串的定義、初始化、賦值等,需要的可以參考一下
    2023-05-05
  • C++超詳細講解RTTI和cast運算符的使用

    C++超詳細講解RTTI和cast運算符的使用

    RTTI(Runtime Type Identification)是“運行時類型識別”的意思。C++引入這個機制是為了讓程序在運行時能根據基類的指針或引用來獲得該指針或引用所指的對象的實際類型,cast強制轉換運算符是一種特殊的運算符,它把一種數據類型轉換為另一種數據類型
    2022-08-08
  • 提高C程序效率的10種有效方法

    提高C程序效率的10種有效方法

    本文向你介紹規(guī)范你的C代碼的10種方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++中strstr函數的實現方法總結

    C++中strstr函數的實現方法總結

    這篇文章主要介紹了C++中strstr函數的實現方法總結的相關資料,希望通過本文能幫助到大家,讓大家掌握這部分內容,需要的朋友可以參考下
    2017-10-10
  • C語言解決百錢買百雞問題

    C語言解決百錢買百雞問題

    本文給大家分享的是一個經典的算法(百元百雞)的C語言版的解決方法,使用的是比較偷懶的窮舉法,有需要的小伙伴可以參考下。
    2016-02-02
  • C語言實現簡單通訊錄系統

    C語言實現簡單通訊錄系統

    這篇文章主要為大家詳細介紹了C語言實現簡單通訊錄系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++構建函數使用介紹

    C++構建函數使用介紹

    構造函數主要作用在于創(chuàng)建對象時為對象的成員屬性賦值,構造函數由編譯器自動調用,無須手動調用;析構函數主要作用在于對象銷毀前系統自動調用,執(zhí)行一 些清理工作
    2022-08-08
  • C語言中的數組和指針匯編代碼分析實例

    C語言中的數組和指針匯編代碼分析實例

    這篇文章主要介紹了C語言中的數組和指針匯編代碼分析實例,本文用一則C語言例子來得到對應的匯編代碼,并一一注解每句匯編代碼的含義,需要的朋友可以參考下
    2015-06-06
  • C語言之實現單鏈表指定結點的插入方式

    C語言之實現單鏈表指定結點的插入方式

    這篇文章主要介紹了C語言之實現單鏈表指定結點的插入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論