給你一個從 n×n 的矩陣,裏面填充 1 到 n×n 。例如當 n 等於 3 的時候,填充的矩陣以下。ios
1 2 3 4 5 6 7 8 9
如今咱們把矩陣中的每條邊的中點連起來,這樣造成了一個新的矩形,請你計算一下這個新的矩形的覆蓋的數字的和。好比,n = 3 的時候矩形覆蓋的數字以下。算法
2 4 5 6 8
那麼當 n 等於 101 的時候,矩陣和是多少?數組
題目解析:
這題畫一個7×7的矩陣觀察起來會比較直觀。矩形邊中點的連線包括邊上的 元素和全部處於邊界點之間的元素。在找準行列關係以後就很簡單了。spa
填空答案以下:code
#include <iostream> using namespace std; int main() { // cout << "/*請在這裏填入答案*/" << endl; cout << "26020201" << endl; return 0; }
題解代碼以下:ci
#include <iostream> #include <cmath> using namespace std; int a[1000][1000]; int main(){ int n; cin>>n; //n=101; int p=1; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ a[i][j]=p++; } } int m=n/2; int sum=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i<=m && j>=m-i && j<=m+i){ sum+=a[i][j]; }else if(i>m && j>=m-(n-i-1) && j<=m+(n-i-1)){ sum+=a[i][j]; } } } cout<<sum; return 0; }
用 0,1,2,3⋯7 這 8 個數組成的全部整數中,質數有多少個(每一個數字必須用到且只能用一次)。it
提示:以 0 開始的數字是非法數字。io
題目解析:
這題考察全排列,注意第一個數字不能是0。stream
填空答案以下:二進制
#include <iostream> using namespace std; int main() { // cout << "/*請在這裏填入答案*/" << endl; cout << "2668" << endl; return 0; }
題解代碼以下:
#include <iostream> #include <cmath> #include <algorithm> using namespace std; int isPrime(int n){ for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return 0; } return 1; } int main(){ int cnt=0; int a[8]={0,1,2,3,4,5,6,7}; do{ if(a[0]==0) continue; int sum=0; for(int i=0;i<8;i++){ sum=sum*10+a[i]; } if(isPrime(sum)) cnt++; }while(next_permutation(a,a+8)); cout<<cnt; return 0; }
一個數的整數次冪,是咱們在計算中常常用到的,可是怎麼能夠在 O(log(n))
的時間內算出結果呢?
代碼框中的代碼是一種實現,請分析並填寫缺失的代碼,求 x^y mod p
的結果。
題目解析:
這題主要考察y & 1
。&是位與操做符,運算法則是在二進制數下,相同位的兩個數字都爲1,則爲1;如有一個不爲1,則爲0。y & 1
作位與操做,y&1是y和1作「按位與」運算,1的二進制只有末位是1,因此y & 1
就是隻保留y的末位(二進制)。y & 1
就表示了y的奇偶性。y & 1 == 1
爲奇數,反之爲偶數。
填空答案以下:
#include <iostream> using namespace std; int pw(int x, int y, int p) { if (!y) { return 1; } // int res = /*在這裏填寫必要的代碼*/; int res = pw(x,y-1,p)+pw(x,y-1,p)*!(y&1); if (y & 1) { //判斷奇偶數,y&1==1爲奇數,反之爲偶數 res = res * x % p; } return res; } int main() { int x, y, p; cin >> x >> y >> p; cout << pw(x, y, p) << endl; return 0; }
N! 末尾有多少個 0 呢?
N! = 1 x 2 x ··· x N。
代碼框中的代碼是一種實現,請分析並填寫缺失的代碼。
填空答案以下:
#include <iostream> using namespace std; int main() { int n, ans = 0; cin >> n; while (n) { //ans += /*在這裏填寫必要的代碼*/; ans += n/=5; } cout << ans << endl; return 0; }