第十八次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,學習不止!!!