2019屆網易互聯網校招筆試-編程題 1. 古老的俄羅斯方塊游戲機。 題目:自定義俄羅斯方塊列數,每次俄羅斯方塊下落個數為1*1,當一行都落滿俄羅斯方塊時,得分+1。現在小明玩到m個俄羅斯方塊,求此時的分數。 輸入: 第一行 列數 俄羅斯方塊個數m 第二行 a(1) a(2) a(3) ...a(i ...
2019屆網易互聯網校招筆試-編程題
1. 古老的俄羅斯方塊游戲機。
題目:自定義俄羅斯方塊列數,每次俄羅斯方塊下落個數為1*1,當一行都落滿俄羅斯方塊時,得分+1。現在小明玩到m個俄羅斯方塊,求此時的分數。
輸入:
第一行 列數 俄羅斯方塊個數m
第二行 a(1) a(2) a(3) ...a(i)...a(m) 表示第i個俄羅斯方塊落在第a(i)行
輸出:分數
例:輸入
3 9
1 1 2 2 2 3 1 2 3
輸出:2
思路:統計數組中每一行的數字重覆的次數c,得分為c/列數n。
1 #include <iostream> 2 #include <string> 3 #include <stdio.h> 4 #include <algorithm> 5 using namespace std; 6 7 int main() 8 { 9 int a[2]; 10 for(int i=0;i<2;i++) cin>>a[i]; 11 char b[1000]; 12 for(int j=0;j<a[1];j++) 13 { 14 cin>>b[j]; 15 } 16 int c=0; 17 for(int i=0;i<sizeof(b);i++) 18 { 19 int n=b[0]; 20 for(int j=i+1;j<sizeof(b);j++) 21 { 22 if(n==b[j]) c+=1; 23 } 24 } 25 26 if(c<a[0]) cout<<0<<endl; 27 else cout<<c/a[0]<<endl; 28 //else cout<<1<<endl; 29 return 0; 30 31 }
2. 一節課總有m分鐘,小明有的時間在睡覺,且每一分鐘聽課的興趣權值不一樣,同桌叫醒小明一次,可持續n分鐘聽課。現給定每一分鐘的小明聽課興趣權值,與此時原來是否在睡覺,求同桌叫醒小明一次,小明清醒後總聽課效率最高(=每分鐘興趣權值*每分鐘)是多少?
輸入:
第一行 一節課總時間m 叫醒聽課時間
第二行 a(1) a(2) a(3) ...a(i)...a(m) a(i)表示第i個分鐘內聽課的興趣權值
第三行 b(1) b(2) b(3) ...b(i)...b(m) b(i)=0或1,第i分鐘內原來是否在睡覺,1為清醒,0為睡覺
輸出:總聽課效率
例:輸入
6 3
1 3 5 2 5 4
1 1 0 1 0 0
輸出:16
思路:輸入m列,n分鐘。關鍵在於求出第幾分鐘叫醒小明。求出n個相鄰的每分鐘感興趣權值*清醒狀態的最小值,即為可以叫醒小明的時間。
1 #include <iostream> 2 #include <string> 3 #include <stdio.h> 4 #include <algorithm> 5 using namespace std; 6 7 int main() 8 { 9 int a[2]; 10 for(int i=0;i<2;i++) cin>>a[i]; 11 int b[1000]; 12 for(int j=0;j<a[0];j++) cin>>b[j]; //每分鐘的權值 13 int c[1000]; 14 for(int j=0;j<a[0];j++) cin>>c[j]; //1為清醒 15 int m[a[0]-a[1]+1]; //用來存儲相鄰的m個數的b*c的最小值,即可用來使c=1的m目標數 16 for(int i=0;i<a[0]-a[1]+1;i++) 17 { 18 for(int j=1;j<a[1];j++) 19 { 20 m[i]=b[i]*c[i]; 21 m[i]+=b[j]*c[j]; 22 } 23 } 24 int number,max=0; 25 for(int i=0;i<(a[0]-a[1]+1);i++) 26 { 27 int min=m[0]; 28 if(min>m[i]) number=i; //求出應該在第number分鐘使c=1 29 } 30 for(int j=0;j<number+a[1];j++) max+=b[j]; 31 cout<<max<<endl; 32 return 0; 33 }