第十八次CSP考试感受
对题目还没理解透就开始编程,太紧张,抗压能力有待提高!
第一题:甲乙丙丁玩数字游戏,跳过7的倍数和含有7的数字
思路:定义变量1累加到n结束,遇到7倍数和含有7数字跳过不计,取余数判断甲乙丙丁
#include<iostream>
using namespace std;
int flag(int n){
if(n%7==0){
return 1;//是
}
while(n>=7){
int temp=n%10;
if(temp==7){
return 1;//是
}
n=n/10;
}
return 0;//否
}
int main(){
int n;
cin>>n;//输入n
int people[4],p1=0,p2=0,p3=0,p4=0,sum=0;//存储4个人的数据
for(int i=1;sum<n;++i){//计数
++sum;
if(i%4==1)
{
if(flag(i)){
++p1;
--sum;
}
}
else if(i%4==2)
{
if(flag(i)){
++p2;
--sum;
}
}
else if(i%4==3)
{
if(flag(i)){
++p3;
--sum;
}
}
else
{
if(flag(i)){
++p4;
--sum;
}
}
}
cout<<p1<<"\n"<<p2<<"\n"<<p3<<"\n"<<p4;
return 0;
}
第二题:对于垃圾站统计分数的问题
思路:上下左右有点则记0分,对角线四个点各加一分就是01234或者没分数的情况
#include<iostream>
using namespace std;
int find(int x,int y,int trash[][2],int n){//上下左右判断
int up=0,down=0,left=0,right=0,grade=0;
for(int i=0;i<n;++i){
if(trash[i][0]==x){//同轴
if(trash[i][1]==(y+1)){
++up;
}
else if(trash[i][1]==(y-1)){
++down;
}
}
if(trash[i][1]==y){//同水平线
if(trash[i][0]==(x+1)){
++right;
}
else if(trash[i][0]==(x-1)){
++left;
}
}
if(trash[i][0]==(x+1)&&trash[i][1]==(y+1)){
++grade;
}
if(trash[i][0]==(x+1)&&trash[i][1]==(y-1)){
++grade;
}
if(trash[i][0]==(x-1)&&trash[i][1]==(y+1)){
++grade;
}
if(trash[i][0]==(x-1)&&trash[i][1]==(y-1)){
++grade;
}//对角线
}
if(up&&down&&right&&left){
return grade;//点
}
return -1;//否则没有
}
int main(){
int n;
cin>>n;
int trash[n][2]={0},grade[5]={0};//分数排序01234,初始化座标为0
for(int i=0;i<n;++i){
for(int j=0;j<2;++j){
cin>>trash[i][j];
}
}
for(int i=0;i<n;++i){//判断一遍
int x=trash[i][0];
int y=trash[i][1];
int sum=find(x,y,trash,n);
if(sum==-1){
//不计分,跳过
}
else if(sum==0){
grade[0]+=1;
}
else if(sum==1){
grade[1]+=1;
}
else if(sum==2){
grade[2]+=1;
}
else if(sum==3){
grade[3]+=1;
}
else{
grade[4]+=1;
}
}
for(int i=0;i<5;++i){
cout<<grade[i]<<endl;
}
return 0;
}
emmm,学习不止!!!