1020:
Encoding
Given a string containing only 'A' - 'Z', we could encode it using the following method:
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
给一个字串只有'A'-'Z‘的字母,我们可以以下列方式来编码它。
注意第一条,它写的是sub-string,也就是子序列的意思。
我一开始以为是这个序列中所有额相同的字符都要统计在一起,然后写成kX的形式。
但是不对,是每碰到相同的字符,再把它们统计在一起,记为kX。 这是英语水平问题造成的debug.
附上代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[10005];
int n,i,j,k,l,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
getchar();
scanf("%s",a);
l=strlen(a);
for(j=0;j<=l-1;j++)
{ t=1;
while(a[j]==a[j+1]) //题目意思又看错了,我还以为它是要把总的字母个数汇合在一起,结果他是比较连续的,并且输出,用样例ABDBBDD就理解了
{
t++; j++;
}
if(t==1) printf("%c",a[j]);
else printf("%d%c",t,a[j]);
}
printf("\n");
}
}
*对了,判断有几个相等在这里写成a[j]==a[j+1],这是个方法。
1021:
Fibonacci Again
There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2).
看似挺简单的一道题,但是直接写会错,不知道为什么。
正确代码:
#include<stdio.h>
__int64 f[1000001];
int main()
{
int i,j,n;
while(scanf("%d",&n)!=EOF)
{
f[0]=7; f[1]=11;
for(i=2;i<=n;i++)
f[i]=(f[i-1]+f[i-2])%3; //太大了,要不停地mod吗?
if(f[n]%3==0) printf("yes\n");
else printf("no\n");
}
}
错误代码:
(不能用直接去算斐波那契数列的值之后再去判断除以3的余数是否等于0,这样子的话当n很大时,会溢出。所以要不停的取摸。)
#include<stdio.h>
int f[1000001];
int main()
{
int i,j,n;
while(scanf("%d",&n)!=EOF)
{
f[0]=7; f[1]=11;
for(i=2;i<=n;i++)
f[i]=f[i-1]+f[i-2];
if(f[n]%3==0) printf("yes\n");
else printf("no\n");
}
}
找规律也可以得出:
#include<stdio.h>
int main()
{
int men[8], i, j, n;
men[0] = 1;
men[1] = 2;
men[2] = 0;
men[3] = 2;
men[4] = 2;
men[5] = 1;
men[6] = 0;
men[7] = 1;
while(scanf("%d", &n) != EOF)
{
if(men[n%8]==0) printf("yes\n");
else printf("no\n");
}
}
一直在这几个值里面重复。