(一)CCF201909-1 小明种苹果
- 试题描述
- 代码
#include <iostream>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
const int N=100;
int main(int argc, char** argv) {
int n,m;
int a[N][N];//定义数组
int count=0;
int sum[N];
cin>>n>>m;
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
cin>>a[i][j];
if(a[i][j]<=0){
sum[i]+=abs(a[i][j]);//每棵树上面的疏果个数
}
count+=a[i][j];//苹果个数总和
}
}
//排序
//找到最多的那个疏果数
int index=0;
int max=0;
for(int i=1;i<=n;i++){
if(sum[i]>max){
max=sum[i];
index=i;
}
}
cout<<count<<" "<<index" "<<max<<endl;
return 0;
}
(二)CCF201909-2 小明种苹果(续)
-
试题描述
-
代码
#include <iostream>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
const int N=101;
int main(){
int n,m;
//t为全部疏果操作结束后所有苹果树上剩下的苹果总数
//d为发生苹果掉落的颗树
//e为相邻连续三棵树发生苹果掉落情况的组数
int t=0,d=0,e=0;
bool flag[N];
int a[N][N];
int count=0;
int temp_sum=0;
int sum[N];
memset(sum,0,sizeof(sum));
memset(flag,false,sizeof(flag)) ;
cin>>n;//苹果树的颗树
for(int i=1;i<=n;i++){
cin>>m;//表示本行后面的整数个数
cin>>a[i][1];
sum[i]=a[i][1];
for(int j=2;j<=m;j++){
cin>>a[i][j];
if(a[i][j]<=0){
sum[i]+=a[i][j];
}else{
//temp_sum=sum[i];
if(a[i][j]<sum[i]){
//若发生了苹果掉落的情况
d++;
flag[i]=true;
}
sum[i]=0;
sum[i]+=a[i][j];
}
}
t+=sum[i];
}
//计算发生掉落的次数
for(int k=1;k<=n;k++){
if(flag[k]&&flag[k+1]&&flag[k+2]){
e++;
}
}
if(flag[n-1]&&flag[n]&&flag[1]) e++;
if(flag[n]&&flag[1]&&flag[2]) e++;
cout<<t<<" "<<d<<" "<<e<<endl;
return 0;
}
(三)CCF201912-2 回收站选址
- 试题
- 代码
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
struct Point{
int x;
int y;
Point(int _x,int _y){
x=_x;
y=_y;
}
//定义规则
bool operator<(const Point &p)const{
if(x==p.x){
return y<p.y;
}else{
return x<p.x;
}
}
};
int n;
int ans[5];
set<Point> pts;
bool find(int x,int y) {
if(pts.find(Point(x,y))!=pts.end()) return true;
return false;
}
int main(){
cin>>n;
int x,y;
for(int i=0;i<n;i++){
cin>>x>>y;
pts.insert(Point(x,y));
}
for(set<Point>::iterator it=pts.begin();it!=pts.end();it++){
x=(*it).x;
y=(*it).y;
//若符合回收站址
if(find(x,y+1)&&find(x,y-1)&&find(x+1,y)&&find(x-1,y)){
//计算 回收站 个数
int cnt=0;
if(find(x-1,y+1)) cnt++;
if(find(x+1,y+1)) cnt++;
if(find(x-1,y-1)) cnt++;
if(find(x+1,y-1))cnt++;
ans[cnt]++;
}
}
for(int i=0;i<5;i++){
cout<<ans[i]<<endl;
}
return 0;
}