鄙人雖然是乙個.net程式設計師,在工作之餘,喜愛演算法。 這個問題與現實的需求蠻貼近,故而分享給大家,我想到兩種方法,提供大家,希望對大家起了乙個開闊思路的作用。
首先,題意是這樣的:
1 飯糰的煩惱
2 4
5 同乙個部門的,同一間大學的,同一年出生的,用同一種型號電腦的,員工們總是以各種理由,各種藉口組織各種長久的,臨時的飯糰。
6 7 參加飯糰,不僅可以以優惠的**嚐到更加豐富的菜式,還可以在吃飯的時候和同事們嘮嘮嗑,吹吹水,增進感情。
8 10
11 飯糰點菜的需求如下:
12 14
15 望最後的人均費用越接近 12 元越好。
16 17 2. 菜式豐富是我們要考慮的另乙個因素。為簡單起見,我們將各種菜餚的屬性歸結為葷菜,素菜,辛辣,
18 清淡,並且每個菜只能點一次。
19 21
22 輸入資料描述如下:
23 24 第一行包含三個整數 n,m,k(0<=16,0題意很長了,這麼從頭到尾看下來的話,令人非常的頭大。我們這裡用圖來梳理一下相應的頭緒:
那麼,怎麼思考這個問題了。一 在輸入的情況下,我要使她的每個的菜名的字元的長度不能大於20的判斷 二 輸入的葷菜數 素菜數 等等 要符合輸入數的總數目 三為了使其滿足人均消費接近12元的目標,我這裡就吧他符合點菜的每個數目的具體情況用乙個鍵值對來儲存起來,其中相應的人均消費的數目做鍵,而相應的點菜的情況做值。四 把比較該鍵值對的最小值。相應的流程圖如圖所示:
有了思路了,我們來看一看看他的具體的實現了.
①為了實現題意,我們需要乙個菜的類相應的源**如下:
1 public class cai
2
8 set
9 }
10 //**
11 public int cprice
12 //是否是葷菜
13 public bool ismeat
14 //是否是辣菜
15 public bool ishot
16 }
實現邏輯的源**如下:
1 //輸入具體的需求的要求
2 console.writeline(
3 @"第一行包含三個整數 n,m,k(0<=16,0caismeat = new list();
19 listcaisnmeat=new list();
20 listcaishot=new list();
21 listcaisnhot=new list();
22 //記錄比較的陣列
23 dictionary> lists = new dictionary>();
24 int countmeat = 0;
25 int countnmeat = 0;
26 int counthot = 0;
27 int countnhot = 0;
28 //緊接著輸入相應的菜數 ①
29 for (int i = 0; i < number1; i++)
30
44 else
45
49 int result;
50 if (int.tryparse(price, out result))
51
54 else
55
60 if (ismeat == "1")
61
66 else if (ismeat == "0")
67
72 else
73
78 if (ishot == "1")
79
84 else if (ishot == "0")
85
90 else
91
96 }
97 console.writeline("請你輸入你的格式為:");
98 console.writeline("1(葷菜) 1(素菜) 1(清單菜) 1(辣菜) ");
99 int numbermeat = 0;
100 int numbernmeat = 0;
101 int numberhot = 0;
102 int numbernhot = 0;
103
104
105 //判斷輸入的菜品和菜的數目是否是合法的 ②
106 while (true)
107
118 else if (numbermeat > countmeat)
119
123 else if (numbernmeat>number2)
124
128 else if (numbernmeat > countnmeat)
129
133 else if (numberhot>number2)
134
138 else if (numberhot>counthot)
139
143 else if (numbernhot > number2)
144
148 else if (numbernhot > countnhot)
149
153 else
154
157 }
158
159 int sum = 0;
160 listtemps = new list();
161 listtemp1=new list();
162 //判斷了某個條件的樣式的搭配 來放入到鍵值對中去③
163 for (int i = 0; i <=number1-counthot; i++)
164
189
190 }
191 }
192 }
193 }
194 //找出最接近人均12元的 菜品的搭配④
195 double min = math.abs(lists.keys.first()-12);
196 double keys = lists.keys.first();
197 foreach (var list in lists.keys)
198 {
199 if (math.abs(list-12)①輸入菜的數目,計算各種素菜數目,葷菜數目,辣菜數目,清淡菜數目,把其各種菜品的菜新增到泛型數目中。
②輸入葷菜,素菜,辣菜,清淡菜的數目,判斷他是否滿足相應的總菜的數目。
③將每種滿足的菜式放入泛型陣列中,計算相應的人均數目,放入鍵值對。
④ 計算相應鍵值對最接近12元的鍵, 將其對應的鍵的值輸出,就滿足題意。
最終,執行結果,效果如下:
這就是我的一點點的想法,還有很多不夠。一、他中時間演算法複雜度是o(n^4).二、還有乙個錯誤,你找的到嗎?
藍橋杯 每週一練之3n 1問題
問題描述 考慮如下的序列生成演算法 從整數 n 開始,如果 n 是偶數,把它除以 2 如果 n 是奇數,把它乘 3 加1。用新得到的值重複上述步驟,直到 n 1 時停止。例如,n 22 時該演算法生成的序列是 22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1 人們...
c語言 每週一練 平衡二叉樹
平衡二叉樹是這樣一棵樹 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。查詢 插入和刪除在平均和最壞情況下都是o log n 可以用於資料庫設計,記憶體分配演算法等。平衡二叉查詢樹 written by huals 2012.10.13 include i...
2020百度之星初賽一 B GPA
problem description 小沃沃一共參加了 4 門考試,每門考試滿分 100 分,最低 0 分,分數是整數。給定四門考試的總分,請問在最優情況下,四門課績點的和最高是多少?分數與績點之間的對應關係如下 95 100 4.3 90 94 4.0 85 89 3.7 80 84 3.3 7...