精品小题目
題目一:
粗心的小李?
Problem Description
小李的店里專賣其它店中下架的樣品電視機,可稱為:樣品電視專賣店。
其標價都是4位數字(即千元不等)。
小李為了標價清晰、方便,使用了預制的類似數碼管的標價簽,只要用顏色筆涂數字就可以了(圖形不能上傳,請參見QQ群)。
這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 6 8 9 0 都可以。這樣一來,如果牌子掛倒了,有可能完全變成了另一個價格,比如:1958 倒著掛就是:8561,差了幾千元啊!!?
當然,多數情況不能倒讀,比如,1110 就不能倒過來,因為0不能作為開始數字。
有一天,悲劇終于發生了。某個店員不小心把店里的某兩個價格牌給掛倒了。并且這兩個價格牌的電視機都賣出去了!
慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了558元。
請根據這些信息計算:賠錢的那個價牌正確的價格應該是多少?
答案是一個4位的整數。
注意:不要提交解答過程,或其它輔助說明類的內容。
Input
無?
Output
輸出一個4為數字?
思路:1.每一位的價格可以一樣,所以不能用全排列,只能遍歷。
2.倒牌的數字組成只能是0,1,2,5,6,8,9,并且其實只互換了6和9。?
3.要存儲虧了200~300之間的,和盈利800~900之間的。一個數組不夠(存在虧相同金額但是原價和售價不同,即屬于不同情況)因而需要定義一個結構體。
#include<iostream> #include<cstring> #include<cmath> #include<algorithm> using namespace std;struct node{int t1,t2,val; }; int ans[200],cnt=0; node kui[1000],zhuan[1000]; int main() { // int a[]={1,2,5,6,8,9,0};//這樣是不行的,因為,每一位的價格可以一樣 //所以不用排列組合,而是用遍歷的方式 int a0,a1,a2,a3;int cnt1=0,cnt2=0;for(int k=1000;k<=9999;k++)//但是數字全是由1,2,5,6,8,9,0組成的{int kk=k;a3=kk%10;kk/=10;a2=kk%10;kk/=10;a1=kk%10;kk/=10;a0=kk%10;if(a3==0) continue;if(a0==3||a0==4||a0==7) continue;if(a1==3||a1==4||a1==7) continue;if(a2==3||a2==4||a2==7) continue;if(a3==3||a3==4||a3==7) continue; int tmp1=a0*1000+a1*100+a2*10+a3;//原來的價格 int a00=a0,a11=a1,a22=a2,a33=a3;//其實反轉之后只有6變成了9其他都沒有變化。if(a0==6) a00=9;if(a0==9) a00=6; if(a1==6) a11=9;if(a1==9) a11=6; if(a2==6) a22=9;if(a2==9) a22=6; if(a3==6) a33=9;if(a3==9) a33=6; int tmp2=a33*1000+a22*100+a11*10+a00;//后來的價格 int chazhi=tmp2-tmp1;if(chazhi>=-300 && chazhi<=-200)//差值有可能相同,后面一樣的話就會把它擠掉 所以用結構體 {kui[cnt1].t1=tmp1;kui[cnt1].t2=tmp2;kui[cnt1].val=chazhi;cnt1++;}if(chazhi>=800 && chazhi<=900){zhuan[cnt2].t1=tmp1;zhuan[cnt2].t2=tmp2;zhuan[cnt2].val=chazhi;cnt2++;}}for(int i=0;i<=cnt1;i++)for(int j=0;j<=cnt2;j++){if(kui[i].val+zhuan[j].val==558){// cout<<"原價"<<kui[i].t1<<" 賣成"<<kui[i].t2<<" 虧了"<<kui[i].val// <<" 原價"<<zhuan[j].t1<<" 賣成"<<zhuan[j].t2<<" 賺了"<<zhuan[j].val<<" 差價為"<<kui[i].val+zhuan[j].val<<endl;cout<<kui[i].t1<<endl;}}return 0; }?
題目二:
取款數量
Problem Description
小明剛剛找到工作,老板人很好,只是老板夫人很愛購物。老板忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。
這不,XX大促銷又來了!老板夫人開出了長長的購物單,都是有打折優惠的。
小明也有個怪癖,不到萬不得已,從不刷卡,直接現金搞定。
現在小明很心煩,請你幫他計算一下,需要從取款機上取多少現金,才能搞定這次購物。
取款機只能提供100元面額的紙幣。小明想盡可能少取些現金,夠用就行了。
你的任務是計算出,小明最少需要取多少現金。
以下是讓人頭疼的購物單,為了保護隱私,物品名稱被隱藏了。
-----------------
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半價
**** 26.75 65折
**** 130.62 半價
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半價
**** 79.54 半價
**** 278.44 7折
**** 199.26 半價
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半價
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半價
**** 218.37 半價
**** 289.69 8折
--------------------
需要說明的是,88折指的是按標價的88%計算,而8折是按80%計算,余者類推。
特別地,半價是按50%計算。
請提交小明要從取款機上提取的金額,單位是元。
答案是一個整數,類似4300的樣子,結尾必然是00,不要填寫任何多余的內容。
特別提醒:不許攜帶計算器入場,也不能打開手機。
Input
無?
Output
輸出一個整數,即小明取款的金額(末尾一定為兩個0)?
思路:這道題目用Word+Excel?
1.把內容復制到word里面,替換掉“**** ”四個*加一個空格,然后選中文本,點擊插入表格——文本轉化為表格。也可以按住ALT+鼠標可以拖動一列。
2.把表格復制到Excel里面,把半價替換為50折,手動把9折、8折等等變成90折、80折等,檢查一下折前面是否都為兩位數,無誤后把折替換為%,然后手動C1=A1*B1,往下拉,最后自動求和得出答案5136.86,即5200元
題目三:
組合樣式數?
Problem Description
小明有3顆紅珊瑚,4顆白珊瑚,5顆黃瑪瑙。
他想用它們串成一圈作為手鏈,送給女朋友。
現在小明想知道:如果考慮手鏈可以隨意轉動或翻轉,一共可以有多少不同的組合樣式呢?
請你提交該整數。不要填寫任何多余的內容或說明性的文字。
Input
無?
Output
輸出一個整數。
思路一:1.暴力枚舉所有排列情況。看到轉動 或 圓形,想到string+string,將兩倍長度的 str 放到一個容器中,然后檢驗:每一次 s 的新的排列方式? 是不是 我 vector 容器中 已經存在 的 兩倍長度 str 的子串 (用到 string : : npos 用法 )
? ? ? ? ? ? ? 2.本題由轉動:s+s,加一倍長度;由反轉:reverse。
? ? ? ? ? ? ? 3.注意string 類型全排列的參數形式,迭代器的用法,reverse的寫法,容器中串的數量 == 2*cnt。
思路二:大佬純數學分析,詳見 https://www.cnblogs.com/lemonbiscuit/p/7776008.html
#include<iostream> #include<algorithm> #include<vector> #include<cstring> using namespace std; //1.查找字符串a是否包含子串b,不是用strA.find(strB) > 0 而是 strA.find(strB) != string:npos 其中string:npos是個特殊值,說明查找沒有匹配 //if (str.find("abc") == string::npos) { ... } //如果沒找到 //絕對不能寫成:if(str.find("abc") ) 因為:找不到abc會返回-1,不為0為True。0為False //2. (*it).find(s,0)==string::npos 表示*it遍歷的時候,從第0個字符查找s,最后還沒找到。 (*it).find(s,0)!=string::npos表示找到了。 //3.弄一個string類型的vector數組。關注迭代器寫法,push_back,reverse操作 ,尤其是reverse。 int main() {int cnt=0;vector<string>v;vector<string>::iterator it;string s = "aaabbbbccccc";do{int flag=0;for(it=v.begin();it!=v.end();it++){if( (*it).find(s,0)!=string::npos )//{flag=1;break;} }if(flag) //在v里面挨個找,如果找到了,這個就重復了 continue;string str=s+s;v.push_back(str);reverse(str.begin(),str.end());//記住reverse如何操作的?不是string.reverse,也不是str.reverse v.push_back(str);cnt++;}while(next_permutation(s.begin(),s.end()));//全排列 string類該當如何? s.begin(),s.end() cout<<cnt;return 0; }題目四:
替小明作弊?
Problem Description
小明參加了少年宮的一項趣味活動:每個小朋友發給一個空白的骰子(它的6個面是空白的,沒有數字),要小朋友自己設計每個面寫哪個數字。但有如下要求:
1. 每個面只能填寫 0 至 8 中的某一個數字。
2. 不同面可以填寫同樣的數字,但6個面總和必須等于24。
填好后,小朋友可以用自己填寫好數字的骰子向少年宮的兩個機器人挑戰----玩擲骰子游戲。規則如下:
三方同時擲出自己的骰子,如果出現任何相同的數字,則三方都不計分。?
如果三方數字都不同,則最小數字一方扣 1 分,最大數字一方加 1 分。?
小明看到了兩個機器人手中的骰子分別是:
0 0 0 8 8 8?
1 1 4 5 6 7?
請你替小明算一下,他如何填寫,才能使自己得分的概率最大。
請提交小明應該填寫的6個數字,按升序排列,數字間用一個空格分開。
如果認為有多個答案,提交字母序最小的那個方案。
注意:只提交一行內容,含有6個被空格分開的數字。不要寫其它附加內容,比如:說明性的文字。
Input
無?
Output
輸出按升序排列的6個數字,數字間用空格分隔
題目五:
完美正方形?
Font Size: ← →
Problem Description
如果一些邊長互不相同的正方形,可以恰好拼出一個更大的正方形,則稱其為完美正方形。
歷史上,人們花了很久才找到了若干完美正方形。比如:如下邊長的22個正方形
2 3 4 6 7 8 12 13 14 15 16 17 18 21 22 23 24 26 27 28 50 60
如圖那樣組合,就是一種解法。此時,
緊貼上邊沿的是:60 50
緊貼下邊沿的是:26 28 17 21 18
22階完美正方形一共有8種。下面的組合是另一種:
2 5 9 11 16 17 19 21 22 24 26 30 31 33 35 36 41 46 47 50 52 61
如果告訴你該方案緊貼著上邊沿的是從左到右依次為:47 46 61,
你能計算出緊貼著下邊沿的是哪幾個正方形嗎?
請提交緊貼著下邊沿的正方形的邊長,從左到右,用空格分開。
不要填寫任何多余的內容或說明文字。
Input
無?
Output
輸出若干個數,中間用空格分隔
?
總結
- 上一篇: jQuery教程大纲
- 下一篇: DruidDataSource详解部分(