#P2034. 计算机笔试复习题.5
计算机笔试复习题.5
下面一题用到了 STL 模板。可以跳过本题
在另一份复习题中有另外一题是不基于 STL 模板的,可以直接训练那一题
(3)分解质因数
从小到大打印正整数 n 的所有质因数(既是质数,又是 n 的因数的数)
样例
输入: 20
输出: 2 5
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> fac;
int i;
for (i=2; i<= n; ++i){
if( 填空(1) ){
bool isprime = true;
for (int j=0;j<fac.size();j++){
if( 填空(2) )
{
isprime = 填空(3);
break;
}
}
if( 填空(4) ) fac.push_back(i);
}
}
for (int k=0; k<fac.size(); ++k) {
cout << 填空(5) << " ";
}
}
- 填空(1) 处应填 {{ select(1) }}
- n%i== 0
- n % i == 1
- n % (i-1) == 0
- n % (i-1) == 1
- 填空(1) 处应填 {{ select(2) }}
- i % fac[j] == 0
- fac[j] % i == 0
- i % fac[j] != 0
- fac[j] % i != 0
- 填空(3) 处应填 {{ select(3) }}
- false
- true
- ( i < = fac[j] )
- ( i == fac[j] )
- 填空(4) 处应填 {{ select(4) }}
- n % i == 0
- i < = fac.size()
- isprime
- ! isprime
- 填空(5) 处应填 {{ select(5) }}
- n/fac[k]
- fac[k]
- fac[k]-1
- n/(fac[k]-1)
(4)魔术数组
一个 N 行 N 列的二维数组,如果它满足如下的特性,则成为 “魔术数组”
-
从二维数组任意选出 N 个整数。
-
选出的 N 个整数都是在不同的行且在不同的列。
-
在满足上述两个条件下,任意选出来的 N 个整数的总和都是相等的。
例如,这是一个 4x4 的二维数组:
140 80 160 60
90 30 110 10
100 40 120 20
130 70 150 50
你会发现,任意从里面选出 4 个来自不同行和不同列的整数,它们的总和都是 340,所以这个一维数组是“魔术数组”。
现在给出整数 N,给出二维数组第一行的 N 个整数,再给出二维数组的左上角到右下角的对角线上的 N 个整数。你的任务是根据给出的数据,构造满足题意的“魔术数组”。 如果有多种方案,输出任意一种方案,如果没有方案,输出 -1 。
试补全程序:
#include<iostream>t
using namespace std;
int n,a[105][105];
int main()
{
cin>>n;
for(int j=1;j<=n;i++)
cin>>a[ 填空(1) ][j];//输入首行数据
for(int i=1;i<=n;i++)
cin>> 填空(2) ;//输入左上角到右下角的对角线上的数据
for(int j=1;j<n;i++)
{
for(int i=j+1;i<=n;i++)
{
填空(3); //填充部分数据
}
}
for(int i=2;i<=nii++)
{
for(int j= 填空(4) ;j<=n;j++)//循环
{
填空(5); ////填充剩余数据
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;i++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
- 填空(1) 处应填 {{ select(6) }}
- 1
- n
- i
- j
- 填空(2) 处应填 {{ select(7) }}
- a[1][i]
- a[i][1]
- a[i][i]
- a[i][j]
- 填空(3) 处应填 {{ select(8) }}
- a[i][j] = a[i][i] + a[j][j] - a[i][j]
- a[i][j] = a[1][j] + a[j][j] - a[1][i]
- a[i][j] = a[1][i] + a[i][i] - a[1][j]
- a[i][j] = a[1][j] + a[i][i] - a[1][i]
- 填空(4) 处不应填 {{ select(9) }}
- i+1
- i
- 1
- 2
题目这样出其实是不好的,因为这个地方和 填空(5) 关联。如果是自由写程序,填空(5) 那个位置有很多种写法,而这个填空(4)问的是不能填什么,这样问其实很绕。
必须先完成 填空(5),再来做填空(4)
- 填空(5) 处应填 {{ select(10) }}
- a[i][j] = a[i][j-1] + a[i-1][j-1] - a[i-1][j]
- a[i][j] = a[i-1][j-1] + a[i-1][j] - a[i][j-1]
- a[i][j] = a[i][j-1] + a[i-1][j] - a[i-1][j-1]
- a[i][j] = a[i-1][j-1] + a[i-1][j] - a[i-1][j]