A:To save the princess

找规律题(霞娘指点)。先求行与列的最大公约数,说白了就是把行和列约分化简。之后很容易得到规律:行+列-1。。

代码:

#include<stdio.h>
int gy(int a,int b)
{
int t;
if(a<b)
{
t=a;
a=b;
b=t;
}
t=a%b;
while(t!=0)
{
a=b;
b=t;
t=a%b;
}
return b;
}
int main()
{
int n,m;
while(scanf(“%d %d”,&n,&m) != EOF)
{
if(n==0 && m==0)
break;
int s,t;
s=gy(n,m);
t=m/s+n/s-1;
printf(“%d\n”,t*s);
}
return 0;
}

 

 

B:Watch

当时做这个题想的太麻烦了,分了好多种情况。。。如当I在V(或X)左边时减,右边时加,导致代码超长,,自己还差点没转过弯来。。。回过头一看就12个数,真还不如用12个if水过,,唉~~

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char t[5];
int d,k;
int i;
int a,b,c,m,n,l;
while(scanf(“%s”,t) != EOF)
{
a=b=c=m=n=l=0;
d=strlen(t);
for(i=0;i<d;i++)
{
if(t[i]==’V’)
{
b++;
if(a==0)
l=1;
}
if(t[i]==’X’)
{
c++;
if(a==0)
n=1;
}
if(t[i]==’I’)
{
a++;
if(b==0&&c==0)
m=1;
}
}

if(m==0&&n==1)
k=c*10+a;
if(m==1&&b==0)
k=c*10-a;
if(m==1&&c==0)
k=b*5-a;
if(m==0&&l==1)
k=b*5+a;
if(b==0&&c==0)
k=a;
printf(“%d\n”,k);
}
return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation