小魚雞湯時刻:點墨(老爸)曰:養精蓄銳,厚積薄發。
墨點兒(我)曰:老爸說的對哈哈!
1.隔行變色
Excel表的格子很多,爲了避免把某行的數據和相鄰行混淆,可以採用隔行變色的樣式。
小明設計的樣式爲:第1行藍色,第2行白色,第3行藍色,第4行白色,....
現在小明想知道,從第21行到第50行一共包含了多少個藍色的行。請你直接提交這個整數,千萬不要填寫任何多餘的內容。
答案:15
2.立方尾不變(初步定範圍)
有些數字的立方的末尾正好是該數字本身。
比如:1,4,5,6,9,24,25,....請你計算一下,在10000以內的數字中(指該數字,並非它立方後的數值),符合這個特徵的正整數一共有多少個。
請提交該整數,不要填寫任何多餘的內容。
答案:36
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
int main() {
int ans=0;
for(ll i=1; i<=10000; i++) {
ll tmp=i*i*i;
if(tmp%10000==i||tmp%1000==i||tmp%100==i||tmp%10==i||tmp==i) {
ans++;
cout<<i<<endl;
}
}
cout<<ans;
return 0;
}
以下是zh同學的代碼,覺得更條理清晰,贊一個!
#include<iostream>
using namespace std;
int main(){
int sum=0;
for(int i=1;i<=9;i++){
if((i*i*i)%10==i)
sum++;
}
for(int i=10;i<=99;i++){
if((i*i*i)%100==i)
sum++;
}
for(int i=100;i<=999;i++){
if((i*i%1000*i)%1000==i)
sum++;
}
for(int i=1000;i<=9999;i++){
if((i*i%10000*i)%10000==i) //爲了避免超出數據範圍,需要先mod 一下
sum++;
}
cout<<sum<<endl;
}
3.立方變自身
觀察下面的現象,某個數字的立方,按位累加仍然等於自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
...請你計算包括1,8,17在內,符合這個性質的正整數一共有多少個?
請填寫該數字,不要填寫任何多餘的內容或說明性的文字。
答案:6
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
int main() {
int ans=0;
for(int i=1;i<10000;i++){
ll tmp=i*i*i;
int sum=0;
while(tmp){
sum+=tmp%10;
tmp/=10;
}
if(sum==i){
cout<<i<<' '<<i*i*i<<endl;
ans++;
}
}
cout<<ans;
return 0;
}
4.九數分三組(初步確定範圍)
1~9的數字可以組成3個3位數,設爲:A,B,C, 現在要求滿足如下關係:
B = 2 * A
C = 3 * A請你寫出A的所有可能答案,數字間用空格分開,數字按升序排列。
注意:只提交A的值,嚴格按照格式要求輸出。
答案:192 219 273 327
#include<iostream>
#include<cstring>
using namespace std;
int v[10];
bool judge(int a,int b,int c){
memset(v,0,sizeof v);
while(a){
v[a%10]++;
a/=10;
}
while(b){
v[b%10]++;
b/=10;
}
while(c){
v[c%10]++;
c/=10;
}
for(int i=1;i<=9;i++)
if(v[i]!=1) return false;
return true;
}
int main() {
int ans=0;
for(int i=111;i<=333;i++){
if(judge(i,i*2,i*3)){
cout<<i<<' '<<i*2<<' '<<i*3<<endl;
ans++;
}
}
cout<<ans;
return 0;
}
5.串逐位和(簡單二分,注意含首不含尾)
給定一個由數字組成的字符串,我們希望得到它的各個數位的和。
比如:“368” 的諸位和是:17
這本來很容易,但爲了充分發揮計算機多核的優勢,小明設計瞭如下的方案:int f(char s[], int begin, int end)
{
int mid;
if(end-begin==1) return s[begin] - '0';
mid = (end+begin) / 2;
return f(s,begin,mid)+f(s,mid,end); //填空(包括頭不包括尾)
}
int main()
{
char s[] = "4725873285783245723";
printf("%d\n",f(s,0,strlen(s)));
return 0;
}你能讀懂他的思路嗎? 請填寫劃線部分缺失的代碼。
注意:只填寫缺少的部分,不要填寫已有代碼或任何多餘內容。
6.無窮分數(老朋友了)
無窮的分數,有時會趨向於固定的數字。
請計算【圖1.jpg】所示的無窮分數,要求四捨五入,精確到小數點後5位,小數位不足的補0。請填寫該浮點數,不能填寫任何多餘的內容。
#include<cstdio>
#include<cmath>
using namespace std;
int main() {
double sum=0;
for(int i=100;i>=1;i--){
sum=(1.0*i)/(i+sum);
printf("%.5f\n",sum);
}
return 0;
}
7.奇妙的數字(解決方法同四題)
小明發現了一個奇妙的數字。它的平方和立方正好把0~9的10個數字每個用且只用了一次。
你能猜出這個數字是多少嗎?請填寫該數字,不要填寫任何多餘的內容。
答案:69
#include<iostream>
#include<cstring>
using namespace std;
int v[10];
bool judge(int a,int b){
memset(v,0,sizeof v);
while(a){
v[a%10]++;
a/=10;
}
while(b){
v[b%10]++;
b/=10;
}
for(int i=0;i<=9;i++)
if(v[i]!=1) return false;
return true;
}
int main() {
for(int i=40;i<=100;i++){
if(judge(i*i,i*i*i))
cout<<i<<' '<<i*i<<' '<<i*i*i<<endl;
}
return 0;
}
8.飲料換購(簡單模擬)
樂羊羊飲料廠正在舉辦一次促銷優惠活動。樂羊羊C型飲料,憑3個瓶蓋可以再換一瓶C型飲料,並且可以一直循環下去(但不允許暫借或賒賬)。
請你計算一下,如果小明不浪費瓶蓋,儘量地參加活動,那麼,對於他初始買入的n瓶飲料,最後他一共能喝到多少瓶飲料。
輸入:一個整數n,表示開始購買的飲料數量(0<n<10000)
輸出:一個整數,表示實際得到的飲料數例如:
用戶輸入:
100
程序應該輸出:
149用戶輸入:
101
程序應該輸出:
151
資源約定:
峯值內存消耗 < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多餘內容。所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。
注意: main函數需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴於編譯環境或操作系統的特殊函數。
注意: 所有依賴的函數必須明確地在源文件中 #include <xxx>, 不能通過工程設置而省略常用頭文件。提交時,注意選擇所期望的編譯器類型。
#include<iostream>
#include<cmath>
using namespace std;
int main() {
int n,sum,cur;
cin>>n;
sum=cur=n;
while(cur>=3){
sum+=cur/3;
cur=cur/3+cur%3;
}
cout<<sum;
return 0;
}
9.打印大X(純找規律題)——極簡主義
小明希望用星號拼湊,打印出一個大X,他要求能夠控制筆畫的寬度和整個字的高度。
爲了便於比對空格,所有的空白位置都以句點符來代替。要求輸入兩個整數m n,表示筆的寬度,X的高度。用空格分開(0<m<n, 3<n<1000, 保證n是奇數)
要求輸出一個大X例如,用戶輸入:
3 9
程序應該輸出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***(如有對齊問題,參看【圖1.jpg】)
再例如,用戶輸入:
4 21
程序應該輸出
****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****(如有對齊問題,參看【圖2.jpg】)
資源約定:
峯值內存消耗 < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多餘內容。所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。
以下爲自己發現規律的手稿(字跡略潦草,還請各位小夥伴們湊合看)
#include<iostream>
#include<string>
using namespace std;
string str[1005];
int main() {
int m,n,mid,len;
cin>>m>>n;
mid=n/2;
len=mid*2+m;
string s(len,'.');
string ss(m,'*');
for(int i=0;i<=mid;i++){
str[i]=s;
str[i].replace(i,m,ss);
str[i].replace(len-m -i,m,ss);
}
for(int i=0;i<=mid;i++)
cout<<str[i]<<endl;
for(int i=mid-1;i>=0;i--)
cout<<str[i]<<endl;
return 0;
}
10.災後重建
Pear市一共有N(<=50000)個居民點,居民點之間有M(<=200000)條雙向道路相連。這些居民點兩兩之間都可以通過雙向道路到達。這種情況一直持續到最近,一次嚴重的地震毀壞了全部M條道路。
震後,Pear打算修復其中一些道路,修理第i條道路需要Pi的時間。不過,Pear並不打算讓全部的點連通,而是選擇一些標號特殊的點讓他們連通。
Pear有Q(<=50000)次詢問,每次詢問,他會選擇所有編號在[l,r]之間,並且 編號 mod K = C 的點,修理一些路使得它們連通。由於所有道路的修理可以同時開工,所以完成修理的時間取決於花費時間最長的一條路,即涉及到的道路中Pi的最大值。你能幫助Pear計算出每次詢問時需要花費的最少時間麼?這裏詢問是獨立的,也就是上一個詢問裏的修理計劃並沒有付諸行動。
【輸入格式】
第一行三個正整數N、M、Q,含義如題面所述。
接下來M行,每行三個正整數Xi、Yi、Pi,表示一條連接Xi和Yi的雙向道路,修復需要Pi的時間。可能有自環,可能有重邊。1<=Pi<=1000000。接下來Q行,每行四個正整數Li、Ri、Ki、Ci,表示這次詢問的點是[Li,Ri]區間中所有編號Mod Ki=Ci的點。保證參與詢問的點至少有兩個。
【輸出格式】
輸出Q行,每行一個正整數表示對應詢問的答案。【樣例輸入】
7 10 4
1 3 10
2 6 9
4 1 5
3 7 4
3 6 9
1 5 8
2 7 4
3 2 10
1 7 6
7 6 9
1 7 1 0
1 7 3 1
2 5 1 0
3 7 2 1【樣例輸出】
9
6
8
8【數據範圍】
對於20%的數據,N,M,Q<=30
對於40%的數據,N,M,Q<=2000
對於100%的數據,N<=50000,M<=2*10^5,Q<=50000. Pi<=10^6. Li,Ri,Ki均在[1,N]範圍內,Ci在[0,對應詢問的Ki)範圍內。
資源約定:
峯值內存消耗 < 256M
CPU消耗 < 5000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多餘內容。所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。
注意: main函數需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴於編譯環境或操作系統的特殊函數。
注意: 所有依賴的函數必須明確地在源文件中 #include <xxx>, 不能通過工程設置而省略常用頭文件。提交時,注意選擇所期望的編譯器類型。