2017.8.29-9.4

来源:互联网 发布:网络交友的危害 编辑:程序博客网 时间:2024/06/05 03:42

这几天是十分充实而有意义的!!

和一群有着相同爱好的目标的人一起努力!!

老师家里有事回老家了 一些教学的任务就落在我们四个以前学过的人身上(说是“大佬”其实就是蒟蒻)

一直认真的研究自己负责的五道题   

其实就是几道模拟水题.....

 P1089 津津的储蓄计划

模拟  模拟    模拟   模拟   

唯一的点就是 最后不能直接*1.2 因为 int 是自动去尾的 会让你和答案有出入  所以这里要用一个小细节  (*120/100)  

上代码(代码极水一看就懂):

#include<bits/stdc++.h>//蒟蒻代码 不喜勿喷 using namespace std;int a[20];int main(){for (int i=1;i<=12;i++)scanf("%d",&a[i]);//输入12个月的预算int sum=0;int cun=0;//要存到麻麻那里的钱 for (int i=1;i<=12;i++){  sum+=300;  if (sum<a[i])        {   printf("%d",-i);   exit(0);//退出整个程序.....        }  sum-=a[i];//减去预算  cun+=(sum/100)*100;//交给麻麻   sum=sum%100;} sum+=cun*120/100;//这波操作很关键 //如果你直接*1.2 int是去尾的 你会发现和答案差一点点//*120/100就可以避免 printf("%d",sum);   return 0;   }





P1202 [USACO1.1]黑色星期五Friday the Thirteenth


这题更水个人感觉    直接循环年份 月份  日期 处理好闰年和星期就好

直接上代码:

#include<bits/stdc++.h>//蒟蒻代码 不喜勿喷using namespace std;int a[10];//记录次数 int b[20];int main(){int n;scanf("%d",&n);int xiqi=0;b[1]=31;b[2]=28;b[3]=31;b[4]=30;b[5]=31;b[6]=30;b[7]=31;b[8]=31;b[9]=30;b[10]=31;b[11]=30;b[12]=31;for (int i=1900;i<=1900+n-1;i++)for (int j=1;j<=12;j++){ if((i%4==0&&i%100!=0)||i%400==0){     b[2]=29;     }//判断今年是不是闰年      else b[2]=28;for (int k=1;k<=b[j];k++){ xiqi++; if (xiqi>7) xiqi=1; if (k==13) a[xiqi]++;       }      }printf("%d %d ",a[6],a[7]);//这题真的坑现输出星期六和星期天题目也没说明!!! for (int i=1;i<=5;i++) printf("%d ",a[i]);    return 0;   }





P1518 两只塔姆沃斯牛 The Tamworth Two


这题我觉得是五题里面最难的一道 有很多难处理的东西 

首先 很多同学在处理农夫和牛的位置的时候都是用交换的 这个方法咋一看没毛病  其实问题很大

举个例子:   

农夫和牛的位置如下:

C

F

如果此时农夫是向上走的  你用交换的话 会使牛换下来 导致一系列错误    

所以我的方法是记录农夫和牛的实时位置就好 不需要改动读进去的矩阵  

其次 判断抓不住的时候 有2种方法

第一种当然就是设一个很大的常数 超过 就说明不能抓住   

第二种是我无意间看到的大佬的方法 :

记录农夫和牛走过一个位置的次数  

如果到达五次 就说明  无法抓到  //需要细细体会


代码如下:

#include<bits/stdc++.h>using namespace std;char a[20][20];int  heng[5];int  shu[5];int main(){heng[0]=0;heng[1]=1;heng[2]=0;heng[3]=-1;shu[0]=-1;shu[1]=0;shu[2]=1;shu[3]=0;int x1,y1;//记录农夫的位置int x2,y2;//记录奶牛的位置 for (int i=0;i<=11;i++)for (int j=0;j<=11;j++) a[i][j]='*';//将边界设为障碍     for (int i=1;i<=10;i++)    for (int j=1;j<=10;j++)    {cin>>a[i][j];          if (a[i][j]=='F') {x1=i;y1=j;}      if (a[i][j]=='C') {x2=i;y2=j;}        }        int x=x1,y=y1; int i=x2,j=y2;int time=0;int fx1=0,fx2=0;//刚开始都是向北走 int sum=0;//记录农夫回到初始的次数 //如果农夫回到初始位置达五次说明无法抓住while (1){time++; // if (x1==x && y1==y&&x2==i&&y2==j) sum++; // if (sum==4) {cout<<0;exit(0);}  if (a[x1+shu[fx1]][y1+heng[fx1]]!='*') {   x1+=shu[fx1];   y1+=heng[fx1];    }  else fx1=(fx1+1)%4;  if (a[x2+shu[fx2]][y2+heng[fx2]]!='*') {   x2+=shu[fx2];   y2+=heng[fx2];    }  else fx2=(fx2+1)%4;if (x1==x2&&y1==y2){   cout<<time;   exit(0);   } if (time>10000000) {cout<<0;exit(char a[20][20];int  heng[5];int  shu[5];int main(){heng[0]=0;heng[1]=1;heng[2]=0;heng[3]=-1;shu[0]=-1;shu[1]=0;shu[2]=1;shu[3]=0;int x1,y1;//记录农夫的位置int x2,y2;//记录奶牛的位置 for (int i=0;i<=11;i++)for (int j=0;j<=11;j++) a[i][j]='*';//将边界设为障碍     for (int i=1;i<=10;i++)    for (int j=1;j<=10;j++)    {cin>>a[i][j];          if (a[i][j]=='F') {x1=i;y1=j;}      if (a[i][j]=='C') {x2=i;y2=j;}        }        int x=x1,y=y1; int i=x2,j=y2;int time=0;int fx1=0,fx2=0;//刚开始都是向北走 int sum=0;//记录农夫回到初始的次数 //如果农夫回到初始位置达五次说明无法抓住while (1){time++; // if (x1==x && y1==y&&x2==i&&y2==j) sum++; // if (sum==4) {cout<<0;exit(0);}  if (a[x1+shu[fx1]][y1+heng[fx1]]!='*') {   x1+=shu[fx1];   y1+=heng[fx1];    }  else fx1=(fx1+1)%4;  if (a[x2+shu[fx2]][y2+heng[fx2]]!='*') {   x2+=shu[fx2];   y2+=heng[fx2];    }  else fx2=(fx2+1)%4;if (x1==x2&&y1==y2){   cout<<time;   exit(0);   } if (time>10000000) {cout<<0;exit(0);}    }    return 0;   }0);}    }    return 0;   }

 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers


这题目就是考你字符串的应用   
这题我们会用到字符串数组  
还有就是除不尽的情况要将未除完的钱保存起来

上代码:


#include<bits/stdc++.h>//蒟蒻代码 不喜勿喷 using namespace std;int a[200];//记录收到的钱 int b[200];//记录送出的钱 int sum;int n;string name[200];//记录名字 string s;void search(string ss)//找到他是第几个 {  for (int i=1;i<=n;i++)  {  if (ss==name[i])   {sum=i;   break;     }    }  return;   }int main(){scanf("%d",&n);for (int i=1;i<=n;i++)  cin>>name[i];int x,y;for (int i=1;i<=n;i++){  cin>>s;  cin>>x>>y;  if (y==0)    {  search(s);  a[sum]+=x;  continue;    }  int num=x/y;  search(s);  a[sum]+=x-num*y;//将没除完的钱保存起来  b[sum]+=x;  for (int k=1;k<=y;k++)   {     cin>>s;     search(s);     a[sum]+=num;   }     }     for (int i=1;i<=n;i++)     {   cout<<name[i]<<" ";   cout<<a[i]-b[i]<<endl;     }  return 0;   }





以上就是这几天一直努力的结果 
帮十几个人改了代码  也了解到一些常犯的错误 (能看出错误说明自己不会犯!!)
这几天十分有意义 感谢岳老师给我这个机会    
我会继续在oi道路上努力的走下去  !!!!!
加油
!!!!!!

原创粉丝点击