没人搭理并且无聊到不想写项目的我开始整理暑假做题情况,卑微.jpg
目录
2019-03-1 小中大
审题:
- 有序
- 可能存在重复数据
- 求极值和中位数
- 按从大到小顺序输出
- 结果为分数,四舍五入保留一位小数。【注意:任意两数除以2后如果有余数,四舍五入后必为xxx.5,我是数学白痴呜呜】
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <stack>
#include<stdlib.h>
#include <vector>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int main()
{
int n;
int a[100005];
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>a[i];
}
int x,y,tmp=n/2;
x=max(a[1],a[n]);
y=min(a[1],a[n]);
if(n%2!=0)
{
tmp+=1;
tmp=a[tmp];
printf("%d %d %d\n",x,tmp,y);
}
else
{
if(((a[tmp]+a[tmp+1])%2)!=0)
{
tmp=(a[tmp]+a[tmp+1])/2;
printf("%d %.1lf %d\n",x,(double)tmp+0.5,y);
}
else
{
tmp=(a[tmp]+a[tmp+1])/2;
printf("%d %.d %d\n",x,tmp,y);
}
}
}
2019-03-2 二十四点
审题:
- 四个数字,范围1–9
- 三个四则运算符
- 每行包含一个长度为7的字符串
- 除法为整除
看到这题就是后悔上课没认真听课,用栈来完成,数字栈和运算符栈
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <stack>
#include<stdlib.h>
#include <vector>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
char str[8];
cin>>str;
stack<int> num;
stack<char> sign;
int i=0;
while(i<strlen(str))
{
if(str[i]>'0' && str[i]<='9')
{
num.push(str[i]-'0');
}
else
{
if(str[i]=='+')
{
sign.push('+');
}
else if(str[i]=='-') //将减法转换成加法
{
num.push((str[i+1]-'0')*(-1));
sign.push('+');
i++;
}
else if(str[i]=='x') //直接计算乘法
{
int ans=num.top();
num.pop();
num.push(ans*(str[i+1]-'0'));
i++;
}
else if(str[i]=='/') //直接计算除法
{
int ans=num.top();
num.pop();
num.push(ans/(str[i+1]-'0'));
i++;
}
}
i++;
}
while(!sign.empty()) //计算剩余的加法
{
int rhs=num.top();
num.pop();
int lhs=num.top();
num.pop();
sign.pop();
num.push(lhs+rhs);
}
int ans=num.top();
if(ans==24)
printf("Yes\n");
else
printf("No\n");
}
}
附送一个我第一次的数组写法(白痴笑)
int main()
{
int n;
cin>>n;
while(n--)
{
char s[8];
cin>>s;
int a[5],k=0,t=0,p=0;
char b[4];
for(int i=0; i<7; i++)
{
if(s[i]>='1'&&s[i]<='9')
{
a[k++]=s[i]-'0';
}
else
{
b[t++]=s[i];
}
}
int sum=0;
if(b[0]=='x')
{
a[1]=a[0]*a[1];
a[0]=0;
}
else if(b[0]=='/')
{
a[1]=a[0]/a[1];
a[0]=0;
}
if(b[1]=='x')
{
a[2]=a[1]*a[2];
a[1]=0;
}
else if(b[1]=='/')
{
a[2]=a[1]/a[2];
a[1]=0;
}
if(b[2]=='x')
{
a[3]=a[2]*a[3];
a[2]=0;
}
else if(b[2]=='/')
{
a[3]=a[2]/a[3];
a[2]=0;
}
if(b[0]=='-')
{
if(a[1]!=0)
{
a[1]=a[0]-a[1];
a[0]=0;
}
else if(a[1]==0&&a[2]!=0)
{
a[2]=a[0]-a[2];
a[0]=0;
}
else if(a[1]==0&&a[2]==0&&a[3]!=0)
{
a[3]=a[0]-a[3];
a[0]=0;
}
}
if(b[1]=='-')
{
if(a[2]!=0)
{
a[2]=a[1]-a[2];
a[1]=0;
}
else if(a[2]==0&&a[3]!=0)
{
a[3]=a[1]-a[3];
a[1]=0;
}
}
if(b[2]=='-')
{
a[3]=a[2]-a[3];
a[2]=0;
}
for(int i=0;i<4;i++)
{
sum+=a[i];
}
if(sum==24)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
}
2019-03-4 消息传递接口
怎么说,…
参考:https://www.cnblogs.com/xidian-mao/p/10568594.html
2018-12-1 小明上学
审题:
- 亮灯顺序:红->->黄->->绿
- 倒计时的显示牌上显示的数字 l(l > 0)是指距离下一次信号灯变化的秒数。
- k=1、2、3 时,分别表示看到了一个红灯、黄灯、绿灯
- k=0,直接加时间
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <stack>
#include<stdlib.h>
#include <vector>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int main()
{
int r,y,g;
int n;
int ans=0;
cin>>r>>y>>g;
cin>>n;
while(n--)
{
int a,b;
cin>>a>>b;
if(a==3)
{
continue;
}
else if(a==1)
{
ans+=b;
}
else if(a==2)
{
ans+=b+r;
}
else
{
ans+=b;
}
}
printf("%d\n",ans);
}
2018-12-2 小明放学
- 已知的是出发时刻的红绿灯状态,因此需要一个函数来处理小明到达这个红绿灯时,该红绿灯状态。
- 注意时间相加的数量范围
- 思路:
https://blog.csdn.net/richenyunqi/article/details/86437886
这位大佬的思路非常巧妙
2018-09-2 买菜
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <stack>
#include<stdlib.h>
#include <vector>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int x[1000002];
int main()
{
int n,a,b;
cin>>n;
n*=2;
for(int i=1;i<=n;i++)
{
cin>>a>>b;
for(int j=a;j<b;j++)
{
x[j]++;
}
}
ll ans=0;
for(int i=0;i<=1000001;i++)
{
if(x[i]==2)
{
ans++;
}
}
printf("%lld\n",ans);
}
2018-09-1 卖菜
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <stack>
#include<stdlib.h>
#include <vector>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int main()
{
int n;
int a[1100],b[1100];
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
}
for(int i=0; i<n; i++)
{
if(i==0)
{
b[i]=((double)a[i]+(double)a[i+1])/2.0;
}
else if(i==n-1)
{
b[i]=((double)a[i]+(double)a[i-1])/2.0;
}
else
{
b[i]=(a[i]+a[i+1]+a[i-1])*1.0/3.0;
}
}
for(int i=0; i<n; i++)
{
printf("%d ",b[i]);
}
printf("\n");
}
2018-03-1 跳一跳
太简单了,忘记保存代码了…
2018-03-2 碰撞的小球
int vis[1100];
int flag[1100];
int main()
{
int n,L,t;
cin>>n>>L>>t;
for(int i=1; i<=n; i++)
{
cin>>vis[i];//位置
flag[i]=1;//方向
}
while(t--)
{
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
if(vis[i]==vis[j])//两个小球在同一位置,方向都要改变
{
if(flag[i]==1)
{
flag[i]=0;
}
else
{
flag[i]=1;
}
if(flag[j]==1)
{
flag[j]=0;
}
else
{
flag[j]=1;
}
}
}
}
for(int i=1; i<=n; i++)//更新位置
{
if(vis[i]==0)
{
flag[i]=1;
}
if(vis[i]==L)
{
flag[i]=0;
}
if(flag[i]==1)
{
vis[i]++;
}
else
{
vis[i]--;
}
}
}
for(int i=1; i<=n; i++)
{
printf("%d ",vis[i]);
}
}
2018-09-4 再卖菜
参考博客:https://www.cnblogs.com/peichaoL/p/10467602.html
https://blog.csdn.net/imotolove/article/details/82777819
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <stack>
#include<stdlib.h>
#include <vector>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int mp[4][4];
int T;
bool judge(int k)
{
for(int i=1; i<=3; i++)
{
if(mp[i][1]==k&&mp[i][2]==k&&mp[i][3]==k)
return true;
if(mp[1][i]==k&&mp[2][i]==k&&mp[3][i]==k)
return true;
}
if(mp[1][1]==k&&mp[2][2]==k&&mp[3][3]==k)
return true;
if(mp[1][3]==k&&mp[2][2]==k&&mp[3][1]==k)
return true;
return false;
}
int dfs(int k)
{
int t=0;
for(int i=1; i<=3; i++)
{
for(int j=1; j<=3; j++)
{
if(mp[i][j]==0)
{
t++;
}
}
}
if(k==1&&judge(2))
{
return -t-1;
}
if(k==2&&judge(1))
{
return t+1;
}
if(t==0)
{
return 0;
}
int AA=INF,BB=-INF;
for(int i=1; i<=3; i++)
{
for(int j=1; j<=3; j++)
{
if(mp[i][j]==0)
{
mp[i][j]=k;
if(k==1)
{
BB=max(BB,dfs(2));
}
if(k==2)
{
AA=min(AA,dfs(1));
}
mp[i][j]=0;
}
}
}
if(k==1)
{
return BB;
}
if(k==2)
{
return AA;
}
}
int main()
{
cin>>T;
while(T--)
{
for(int i=1; i<=3; i++)
{
for(int j=1; j<=3; j++)
{
cin>>mp[i][j];
}
}
int ans=dfs(1);
printf("%d\n",ans);
}
}