现有 2 n × 2 n ( n ≤ 10 ) 2^n\times 2^n (n\le10) 2n×2n(n≤10) 名作弊者站成一个正方形方阵等候 kkksc03 的发落。kkksc03 决定赦免一些作弊者。他将正方形矩阵均分为 4 个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免,剩下 3 个小矩阵中,每一个矩阵继续分为 4 个更小的矩阵,然后通过同样的方式赦免作弊者……直到矩阵无法再分下去为止。所有没有被赦免的作弊者都将被处以棕名处罚。
给出 n,请输出每名作弊者的命运,其中 0 代表被赦免,1 代表不被赦免。
一个整数 n。
2 n × 2 n 2^n \times 2^n 2n×2n 的 01 矩阵,代表每个人是否被赦免。数字之间有一个空格。
输入
3
输出
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 0 1
0 0 0 0 1 1 1 1
0 0 0 1 0 0 0 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1
法一:
#include
#include
using namespace std;
long long a[1050][1050];
void f(int x,int y,int x1, int y1){
if(x1<=x && y1<=y) { //递归终止条件,末位置小于初始位置
return;
}
for(int i=x;i<=x1; i++){
for(int j=y; j<=y1; j++){
if(i<=x+(x1-x+1)/2-1 && j<=y+(y1-y+1)/2-1){ //属于左上角填0
a[i][j]=0;
}else{ //其他填1
a[i][j]=1;
}
}
}
f(x,y+(y1-y+1)/2,x+(x1-x+1)/2-1,y1); //右上 起始位置+长度-1=末位置
f(x+(x1-x+1)/2,y,x1,y+(y1-y+1)/2-1); //左下
f(x+(x1-x+1)/2,y+(y1-y+1)/2,x1,y1); //右下
}
int main(){
int n;
cin>>n;
f(1,1,pow(2,n),pow(2,n));
for(int i=1; i<=pow(2,n); i++){
for(int j=1; j<=pow(2,n); j++){
cout<<a[i][j]<<" ";
}cout<<endl;
}
return 0;
}
法二:
#include
#include
using namespace std;
long long a[1050][1050];
void f(int x,int y,int x1, int y1){
if(x1<=x && y1<=y) { //递归终止条件,末位置小于初始位置
a[x][y]=1; //只要x=x1,y=y1,就要填1
return;
}
f(x,y+(y1-y+1)/2,x+(x1-x+1)/2-1,y1); //右上 起始位置+长度-1=末位置
f(x+(x1-x+1)/2,y,x1,y+(y1-y+1)/2-1); //左下
f(x+(x1-x+1)/2,y+(y1-y+1)/2,x1,y1); //右下
}
int main(){
int n;
cin>>n;
f(1,1,pow(2,n),pow(2,n));
for(int i=1; i<=pow(2,n); i++){
for(int j=1; j<=pow(2,n); j++){
cout<<a[i][j]<<" ";
}cout<<endl;
}
return 0;
}
现有 N 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 150 的自然数)。总分最高的学生就是最厉害的,请输出最厉害的学生各项信息(姓名、各科成绩)。如果有多个总分相同的学生,输出靠前的那位。
第一行输入一个正整数 N,表示学生个数。
第二行开始,往下 N 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
输出最厉害的学生。
输入
3
senpai 114 51 4
lxl 114 10 23
fafa 51 42 60
输出
senpai 114 51 4
#include
#include
using namespace std;
struct student{ //student是结构体的名称
string name; //name表示姓名
int chinese,math,eng,score,id;
//id,chinese,math,eng,ave 分别表示学号、语文、数学、英语、平均分成绩。
}data[1030]; //data是一个结构体数组,每个数组元素是一个结构体数据类型
bool mycmp( student a, student b){ //定义结构体的比较方式
return(a.score>b.score || a.score==b.score && a.id<b.id ) ;
//总分按降序,必须要对id进行判断
}
int main(){
int n;
cin>>n;
for(int i=0; i<n; i++){ //输入求总分
cin>>data[i].name>>data[i].chinese>>data[i].math>>data[i].eng;
data[i].score= data[i].chinese+data[i].math+data[i].eng;
data[i].id=i;
}
sort(data,data+n,mycmp); //按自定义排序
cout<<data[0].name<<" "<<data[0].chinese<<" "<<data[0].math<<" "<<data[0].eng<<endl;
return 0;
}
现有 N ( N ≤ 1000 ) N(N\le 1000) N(N≤1000) 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 个字符的字符串,没有空格)、语文、数学、英语成绩(均为不超过 150 的自然数)。如果某对学生 < i , j > \text{<}i,j\text{>} <i,j> 的每一科成绩的分差都不大于 5,且总分分差不大于 10,那么这对学生就是“旗鼓相当的对手”。现在我们想知道这些同学中,哪些是“旗鼓相当的对手”?请输出他们的姓名。
所有人的姓名是按照字典序给出的,输出时也应该按照字典序输出所有对手组合。也就是说,这对组合的第一个名字的字典序应该小于第二个;如果两个组合中第一个名字不一样,则第一个名字字典序小的先输出;如果两个组合的第一个名字一样但第二个名字不同,则第二个名字字典序小的先输出。
第一行输入一个正整数 N,表示学生个数。
第二行开始,往下 N 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
输出若干行,每行两个以空格隔开的字符串,表示一组旗鼓相当的对手。注意题目描述中的输出格式。
输入
3
fafa 90 90 90
lxl 95 85 90
senpai 100 80 91
输出
fafa lxl
lxl senpai
#include
#include
using namespace std;
struct student{ //student是结构体的名称
string name; //name表示姓名
int chinese,math,eng,score;
//chinese,math,eng,ave 分别表示学号、语文、数学、英语、平均分成绩。
}data[1030];
int main(){
int n;
cin>>n;
for(int i=0; i<n; i++){ //输入求总分
cin>>data[i].name>>data[i].chinese>>data[i].math>>data[i].eng;
data[i].score= data[i].chinese+data[i].math+data[i].eng;
}
for(int i=0; i<n-1; i++){
for(int j=i+1; j<n; j++){
if(abs(data[i].score-data[j].score)<=10 &&
abs(data[i].chinese-data[j].chinese)<=5 &&
abs(data[i].math-data[j].math)<=5 &&
abs(data[i].eng-data[j].eng)<=5){
cout<<data[i].name<<" "<<data[j].name<<endl;
}
}
}
return 0;
}
现有 N 名同学,每名同学需要设计一个结构体记录以下信息:学号、学业成绩和素质拓展成绩、综合分数(实数)。每行读入同学的姓名、学业成绩和素质拓展成绩,并且计算综合分数(分别按照 70 % 70\% 70% 和 30 % 30\% 30% 权重累加),存入结构体中。还需要在结构体中定义一个成员函数,返回该结构体对象的学业成绩和素质拓展成绩的总分。
然后需要设计一个函数,其参数是一个学生结构体对象,判断该学生是否“优秀”。优秀的定义是学业和素质拓展成绩总分大于 140 分,且综合分数不小于 80 分。
当然通过本题很容易啦,本题只是为了帮助你训练结构体的使用方法。
本题存在精度误差问题,请将 a ∗ 0.3 + b ∗ 0.7 a * 0.3 + b * 0.7 a∗0.3+b∗0.7 与 80 比较 转化为 a ∗ 3 + b ∗ 7 a * 3 + b * 7 a∗3+b∗7 与 800 比较。
第一行一个整数 N。
接下来 N 行,每行 3 个整数,依次代表学号、学业成绩和素质拓展成绩。
N 行,如果第 i 名学生是优秀的,输出 Excellent,否则输出 Not excellent。
输入
4
1223 95 59
1224 50 7
1473 32 45
1556 86 99
输出
Excellent
Not excellent
Not excellent
Excellent
#include
#include
using namespace std;
struct student{
int id,xueye,suzhi;
float zonghe;
//学业、素质、综合
}data[1030];
int main(){
int n;
cin>>n;
for(int i=0; i<n; i++){ //输入求综合
cin>>data[i].id>>data[i].xueye>>data[i].suzhi;
data[i].zonghe= data[i].xueye*7+data[i].suzhi*3;
if(data[i].xueye+data[i].suzhi>140 && data[i].zonghe >=800){
cout<<"Excellent"<<endl;
}
else{
cout<<"Not excellent"<<endl;
}
}
return 0;
}
已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。
输入一个正整数 n。
输出一个正整数 p,即较大的那个质数。
输入
21
输出
7
#include
using namespace std;
int main(){
int n, p;
cin >> n;
for(int i=2; i<n/2; i++){
if(n % i == 0){
p=n/i;
break;
}
}
cout << p;
return 0;
}