1
不懂题意
<>表示移动方向,不能越界
#include<stdio.h>
int main()
{
int i,j,n,t,count;
char a[200005];
count=0;
scanf("%d",&n);
scanf("%s",&a);
for(i=0;i<n;i++)
{
if(a[i]=='<')
{
count++;
}
else
{
break;
}
}
for(i=n-1;i>=0;i--)
{
if(a[i]=='>')
{
count++;
}
else
{
break;
}
}
printf("%d\n",count);
return 0;
}
2
尽量简化算法,处理数字比处理字符数组简单
#include<stdio.h>
int main()
{
int i,t,hour,min;
scanf("%d:%d",&hour,&min);
t=0;
while(min/10!=hour%10||min%10!=hour/10)
{
min++;
if(min==60)
{
hour++;min=0;
}
if(hour==24)
{
hour=0;
}
t++;
}
printf("%d\n",t);
return 0;
}
3
列出每种情况,鸡兔同笼
找不到规律,就挨个算
#include<stdio.h>
int main()
{
int n,a;
scanf("%d",&n);
while(n--)
{
scanf("%d",&a);
if((a%3==0)||(a%7==0)||a==10||a>11)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
4
简单问题找规律,简化代码
#include<stdio.h>
int main()
{
long long n;
scanf("%lld",&n);
if(n%2==0)
{
printf("%lld\n",n/2);
}
else
{
printf("%lld\n",(-1)*(n+1)/2);
}
return 0;
}
5
每种情况必须考虑,不能想当然
#include<stdio.h>
int main()
{
int a,b,c,max;
scanf("%d%d%d",&a,&b,&c);
max=a+b+c;
if(max<a+b*c)
{
max=a+b*c;
}
if(max<a*b*c)
{
max=a*b*c;
}
if(max<a*b+c)
{
max=a*b+c;
}
if(max<(a+b)*c)
{
max=(a+b)*c;
}
if(max<a*(b+c))
{
max=a*(b+c);
}
printf("%d\n",max);
return 0;
}
6
注意出现VK时,要转换为其他字符
数过的就不用再数
#include<stdio.h>
#include<string.h>
int main()
{
int t,i,len;
t=0;
char a[101];
scanf("%s",&a);
len=strlen(a);
for(i=0;i<len-1;i++)
{
if(a[i]=='V'&&a[i+1]=='K')
{
t++;a[i]='v';a[i+1]='k';
}
}
for(i=0;i<len-1;i++)
{
if((a[i]=='V'&&a[i+1]=='V')||(a[i]=='K'&&a[i+1]=='K'))
{
t++;break;
}
}
printf("%d\n",t);
return 0;
}
7
#include<stdio.h>
int main()
{
int n,t,a;
scanf("%d",&n);
t=0;
while(n--)
{
scanf("%d",&a);
if(a<=500000)
{
if(t<a)
{
t=a-1;
}
}
else
{
if(t<1000000-a)
{
t=1000000-a;
}
}
}
printf("%d\n",t);
return 0;
}
8
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct tests
{
int s;
int d;
int c;
int num;
};
bool cmp(tests a,tests b)
{
return a.d<b.d;
}
int main()
{
int n,m,i,j,t;
int day[101];
struct tests a[101];
scanf("%d%d",&n,&m);
memset(day,0,sizeof(day));
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a[i].s,&a[i].d,&a[i].c);
a[i].num=i;
day[a[i].d]=m+1;
}
sort(a+1,a+m+1,cmp);
for(j=1;j<=n;j++)
{
for(i=1;i<=m;i++)
{
if(day[j])
{
continue;
}
if(j>=a[i].s&&j<a[i].d)
{
if(a[i].c)
{
day[j]=a[i].num;a[i].c--;
}
}
}
}
t=1;
for(i=1;i<=m;i++)
{
if(a[i].c)
{
printf("-1\n");t=0;break;
}
}
if(t)
{
for(j=1;j<n;j++)
{
printf("%d ",day[j]);
}
printf("%d\n",day[j]);
}
return 0;
}
9
用strcpy相当于给字符串挨个赋值
不能单独直接赋值字符串数组
用指针
#include<stdio.h>
#include<string.h>
int main()
{
int h1,a1,c1,h2,a2,i,j;
char a[100000][10];
scanf("%d%d%d%d%d",&h1,&a1,&c1,&h2,&a2);
i=0;
while(h2>0)
{
if(h1<=a2&&h2>a1)
{
h1+=c1;
h1-=a2;
strcpy(a[i],"HEAL");
}
else
{
h1-=a2;
h2-=a1;
strcpy(a[i],"STRIKE");
}
i++;
}
printf("%d\n",i);
for(j=0;j<i;j++)
{
printf("%s\n",a[j]);
}
return 0;
}