这几天是十分充实而有意义的!!
和一群有着相同爱好的目标的人一起努力!!
老师家里有事回老家了 一些教学的任务就落在我们四个以前学过的人身上(说是“大佬”其实就是蒟蒻)
一直认真的研究自己负责的五道题
其实就是几道模拟水题.....
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道路上努力的走下去 !!!!!
加油
!!!!!!
!!!!!!