刷题链接:poj.org
北大online题库
1.3650 The Seven Percent Solution
解释:URIs里面有些保留字符不能以原本的样子出现,只能用百分号加2个十六进制数表示,就是字符串替代的问题。
解法:直接用switch就好,用printf的注意输出的时候要2个%
3981 ,字符串替换,同上。
2.2941 Homogeneous Squares
解释:在一个N*N的矩阵中,任取N个行列并不相同的数字,如果每次取出这N个数的和都一样的话,就是同质的,反之就是不同质的。
解法:只要保证每个2*2的子矩阵的对角线之和相等的话就是同质的。
3.2940 Wine Trading in Gergovia
解释:Gergovia的人,有人买酒有人卖酒,ai<0表示卖了ai瓶酒,ai>0表示买了ai瓶酒。买卖酒需要运输,1瓶酒运距离1需要1个工作单位,如果有个an的序列,代表n个人买卖酒的情况,且这n个ai之和为0,问这些酒交易成功需要多少个工作单位。
解法:第一个数为a1,如果小于0,则至少需要a1个工作单位,若a2大于0且小于a1的绝对值,则还至少需要a1-a2个工作单位。同理可得,只要将每次求和的绝对值加在一起即可。
for(i=0;i<n;i++)
{
temp+=a[i];
sum+=abs(double(temp));
}
4.1045 Bode Plot
解释:公式:v1 = VS coswt and v2 = VRcos (wt + q ) , v2 = iR , i = C*d/dt (v1-v2) ,给出 Vs, R, C,求出Vr
解法:自己算,啦啦啦~
5.2719 Faulty Odometer
解释:有一个有问题的里程表,每次跑过3之后就直接跳过4,跑到了5,问,给出一个里程表上的数字,期望求出真正跑了多远
解法:每位的值和4比较,如果大于4则减1,如果小于4,则不减。然后求出每一位真实的数字。然后对每位数字求和,少跑了4这一位数字,所以是按照九进制求和而不是十进制。
6.2291 Rotten Ropes
解释:1根绳子能承受t的重量,2根这样的绳子就可以承受2t的重量,如果有3根绳子,分别能承受1,10,15 重量,把这三根绳子合在一起,最多能承受重量为3的物品,否则为1的那根就会断掉了,但是断掉之后就可以承受2*10=20的重量了。
给出一些绳子能承受的重量,问最多能承受多大的重量。
解法:将绳子能承受的重量排序,a[n-1]*1,a[n-2]*2..一直求和,若a[i]*(n-i-1)<a[i+1]*(n-i),则终止比较,输出a[i+1]*(n-i),
7.1401 Factorial
解释:定义Z(N)为阶乘N后面的0的个数
解法:0是怎么来的呢?2*5,10或者2的倍数*5的倍数以及10的倍数,因为5的倍数少于2的倍数,10也是5的倍数,所以只要看5的倍数有多少即可。同时25是5*5,所以是2个0。所以Z(N)=N/5+N/25+N/625...
8.1338 Ugly Numbers
解释:丑数就是那些只含有2,3,5这三个数的数字,特别的,1也算一个丑数
解法:打表法,打表和之前的稍微有些不同,a[0]=1,要设置3个变量,2,3,5各一个。num2,num3,num5,然后每个数*2,3,5,比较大小之后置数
for(i=2;i<=1500;i++)
{
u[i]=min(u[i2]*2,min(u[i3]*3,u[i5]*5));
//printf("%d",min(i2*2,i3*3));
if(u[i]==u[i2]*2)
i2++;
if(u[i]==u[i3]*3)
i3++;
if(u[i]==u[i5]*5)
i5++;
}
9.3913 Gnome Sequencing
解释:就是看序列是否是有序的,无论升序还是降序
解法:三个一行,很好比较哒~~~
10.3302 Subsequence
解释:判断s2或者s2的逆序列是否是s1的子序列。
解法:直接扫描s1,s2,按着顺序来扫描的话,如果s1和s2(或逆序)相等的长度等于s2的长度,则是子序列。