给你一个从 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; }