写在前面:因为在家上课水了一学期的网课,最近开始着手复习(预习)。所以这次做这个比赛明显感觉到有点生疏了,这东西还是得每天练一点保持一点手感。 1个小时八道题,我写完前六道的时候记得时间只剩24分钟左右了,又花了点时间改第六题,导致最后没时间细看第七题。
思路:这题我记得我做的时候大致看了下题没太看懂,然后看了一下输入输出样例发现就是除一下就行,代码如下:
#include
using namespace std;
inline void read(int &x)
{
int w=1;x=0;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x*=w;
}
int a,b;
double x;
int main()
{
read(a); read(b);
x=a*1.0/b;
printf("%d/%.1lf=%d",a,x,b);
}
思路:这个题就是考察了if-else语句,看完题直接写就行了,代码如下:
#include
using namespace std;
inline void read(int &x)
{
int w=1;x=0;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x*=w;
}
int a;
int main()
{
read(a);
if(a>=90) printf("gong xi ni kao le %d fen!",a);
else printf("kao le %d fen bie xie qi!",a);
}
思路:for循环模拟题,五个变量,总成绩,男成绩,男人数,女成绩,女人数。然后输出的时候注意判断就行了,因为我比赛的时候没想那么多,所以下面的代码你可能看起来感觉有点笨拙~哈哈哈。
#include
using namespace std;
inline void read(int &x)
{
int w=1;x=0;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x*=w;
}
int cnt1,cnt2,n;
double sum,sum1,sum2;
int main()
{
read(n);
for(int i=0,x,y;i
思路:这个我感觉很多人可能想复杂了,就简简单单两个变量输入后一加,然后转化成字符串一个一个读出来,整型转字符串的函数很多,我这里用了to_string. 当然,如果你说你比赛的时候并不知道这些函数,也完全可以加完之后讲每一位存到一个整形数组里(负号不用存,特判一下)最后遍历输出就行了,代码如下:
#include
using namespace std;
inline void read(int &x)
{
int w=1;x=0;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x*=w;
}
int a,b;
int main()
{
read(a); read(b);
a+=b;
string s=to_string(a);
for(int i=0;i
思路:题目看起来有点难,其实就是两个操作:
1.位数一样不一样 不一样直接就是No
2.位数不一样的有几位 大于1位直接No
3.不一样的位数是否在1的范围内 不在直接No
什么?不是只有两个操作吗? 后两个可以同时处理,所以只有两个。
代码如下:
#include
using namespace std;
inline void read(int &x)
{
int w=1;x=0;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x*=w;
}
string s,s1;
int main()
{
cin>>s;
int len=s.length();
while(1)
{
cin>>s1;
if(s1[0]=='-'&&s1[1]=='1') break;
if(s1.length()!=len)
{
puts("No");
continue;
}
int cnt=0,flag=0;
for(int i=0;i1) {puts("No"); flag=1;break;}
if(s1[i]+1!=s[i]&&s1[i]-1!=s[i])
{
puts("No");
flag=1;break;
}
}
if(!flag) puts("Yes");
}
}
思路:这道题相当于前几道就有点意思了,虽然也只是模拟题,但是写起来要注意的细节比较多。当时我提交后扣了2分,又改了一会儿没找到原因,最后比赛结束又给我加了两分(害,白耽误我这半天时间)。
分析:
1.如何存储这三个手势来方便输出赢或者输的手势。
2.如何判断他现在在第几个系统(因为每个系统赢的次数不一样,且是个环)
首先回答问题1.
最笨的办法就是直接if-else 再输出的时候if人家剪刀 就输出石头,以此类推。当然,这么写的话可想而知,只写个判断需要输出啥可能就要超多行。 然后我们也可以用一个字符串数组存储比如string s【】={“JianDao”,“ChuiZi”,“Bu”},然后利用他们的下标建立输赢关系。比如输入的是下标1,你输出的肯定是下标+1后的字符串。 还有一种解决办法是map,就是我比赛的时候用的一种方法,具体见下面代码。
然后回答问题2,
可以用一个数组存储所有系统的值,然后用一个下标来标记当前在哪个系统(我下面的代码用idx)。然后用一个取余操作可以表示出来这个环(具体见下面代码)。
#include
using namespace std;
inline void read(int &x)
{
int w=1;x=0;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x*=w;
}
int n,a[110],cnt=1;
string s;
mapm1;
mapm2,m3;
int main()
{
m1["JianDao"]=1;m1["ChuiZi"]=2;m1["Bu"]=3;
m2[1]="ChuiZi";m2[2]="Bu";m2[3]="JianDao";
m3[1]="Bu";m3[2]="JianDao";m3[3]="ChuiZi";
read(n);
for(int i=1;i<=n;i++) read(a[i]);
int idx=1;
while(1)
{
cin>>s;
if(s[0]=='E') break;
if(cnt<=a[idx])
{
cout<
唉,时间不够没看这个题,1分都没水到是真可惜。暂时不更这道题
思路:最后做这个题没多少时间了,
看了一下,随便拿两个,判断三个数能不能构成三角形
又看了一下,数据范围很友好。
好,直接双重循环偏分。
#include
using namespace std;
inline void read(int &x)
{
int w=1;x=0;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
x*=w;
}
int a,b,x[10010],cnt;
int main()
{
read(a); read(b);
for(int i=0;ix[j]&&x[i]+x[j]>b&&x[j]+b>x[i])
cnt++;
cout<