19屆瓜子測試開發工程師校招-程式設計題
考試時長:90分鐘
考試題型:選擇題15道(包括單選與多選),程式設計題3道。
考試範圍:
選擇題涵蓋面比較廣,包括資料庫的設計模式,結構型模式有哪幾種,排序中的穩定排序,使用者撥號認證的協議,TCP/IP對應OSI網路協議哪一層,Java與C++,資料庫聯合查詢等。
程式設計題1:給出兩個數,輸出最大公約數與最大公倍數
1 #include <iostream> 2 #include<stdio.h> 3 using namespace std; 4 5 int main() 6 { 7int m,n,a; 8while((cin>>m>>n)!=NULL) 9{ 10while(m>0&&n>0&&m==n) 11{ 12cout<<1<<endl; 13cout<<m<<endl; 14return 0; 15} 16while(m>0&&n>0&&m!=n) 17{ 18for(int i=2;i<=m*n;i++) 19{ 20if(m%i==0&&n%i==0) 21{ 22cout<<i<<endl; 23cout<<m*n/i<<endl; 24} 25} 26return 0; 27} 28} 29//return 0; 30 }
程式設計題2:數字和為sum的方法數
題目:給定一個有n個正整數的陣列A和一個整數sum,,求選擇陣列中部分數字和為sum的方案數。當兩種選取方案有一個數字的下標不一樣,我們就認為是不同的組成方案。
輸入:第一行為兩個正整數n(1<=n<=1000),sum(1<=sum<=1000);
第二行為n個正整數Ai,以空格隔開
輸出:輸出所求的方案數
例1:輸入
5 15
5 5 10 2 3
輸出: 4
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 typedef long long LL; 5 6 LL dp[1000][1000]; 7 int main() 8 { 9int n,sum; 10scanf("%d %d",&n,&sum); 11int array[1000]; 12for(int i=0;i<n;i++) cin>>array[i]; 13while(n>=1&&n<=1000&&sum>=1&&sum<=1000) 14{ 15for(int j=0;j<n;j++) dp[0][j]=0; 16dp[0][0]=1; 17for(int i=1;i<=n;i++) 18{ 19for(int j=0;j<=sum;j++) 20{ 21dp[i][j]=dp[i-1][j]; 22if(j>=array[i-1]) dp[i][j] +=dp[i-1][j-array[i-1]]; 23} 24} 25cout<<dp[n][sum]<<endl; 26return 0; 27} 28 }
程式設計題3:
題目:有一堆石子共有N個。A B兩個人輪流拿,A先拿。每次最少拿1顆,最多拿K顆,拿到最後1顆石子的人獲勝。假設A,B都非常聰明,拿石子的過程不會出現失誤。給出N和K,問最後誰能贏得比賽。假如N=3,K=2.無論A如何拿,B都可以拿到最後1顆石子。
輸入:第1行:一個數T,表示後面用作輸入測試的數的數量。(1<=T<=10000)
第2-T+1行:每行2個數N,K。中間用空格分隔。
輸出:共T行,如果A獲勝輸出A,如果B獲勝輸出B。
例1:輸入
4
3 2
4 2
7 3
8 3
輸出
B
A
A
B
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7int t; 8cin>>t; 9int array[10000][2]; 10for(int i=0;i<t;i++) 11{ 12for(int j=0;j<2;j++) cin>>array[i][j]; 13} 14for(int i=0;i<t;i++) 15{ 16if(array[i][0]<=array[i][1]) 17{ 18cout<<"A"<<endl; 19continue; 20} 21else 22{ 23array[i][0]%=(array[i][1]+1); 24if(array[i][0]==0) 25cout<<"B\n"; 26else 27cout<<"A\n"; 28} 29 30} 31return 0; 32 }