2014
03-02

# Combination Lock

A combination lock consists of a circular dial, which can be turned (clockwise or counterclockwise) and is embedded into the "fixed" part of the lock. The dial has N evenly spaced "ticks". The ticks are numbered from 0 to N – 1 , increasing in the clockwise direction. The fixed part of the lock has a "mark" which always "points to" a particular tick on the dial. Of course, the mark points to different ticks as the dial is turned.

The lock comes with three code numbers T1 , T2 , T3 . These are non-negative integers and each of them is less than N . No two of the three are the same.

The lock is opened in three stages of operations:

1. Turn the dial clockwise exactly two full revolutions, and continue to turn it clockwise until the mark points to tick T1 .
2. Turn the dial one full revolution counterclockwise and continue to turn it counterclockwise until the mark points to tick T2 .
3. Turn the dial clockwise until the mark points to tick T3 . The lock should now open.

You must find the maximum possible number of ticks the dial must be turned in order to open the lock. The number of ticks turned is defined to be the sum of the ticks turned in the three stages outlined above, and is always positive regardless of direction.

The input file consists of a number of test cases, one test case per line. Each line of the input file contains four integers: N , T1 , T2 , T3 , in this order, separated by blank spaces. The integer N is a multiple of 5, 25<=N<=100 . The numbers T1 , T2 and T3 satisfy the constraints stated under the description above. The input will be terminated by a line with N = T1 = T2 = T3 = 0 .

The input file consists of a number of test cases, one test case per line. Each line of the input file contains four integers: N , T1 , T2 , T3 , in this order, separated by blank spaces. The integer N is a multiple of 5, 25<=N<=100 . The numbers T1 , T2 and T3 satisfy the constraints stated under the description above. The input will be terminated by a line with N = T1 = T2 = T3 = 0 .

80 20 40 50
80 10 79 12
0 0 0 0

409
455

#include <stdio.h>
int main()
{
int i, a, b, c, d;
while (scanf("%d %d %d %d",&i,&a,&b,&c)!=EOF)
{
if (i+a+b+c==0)
break;

d = 720+360 + (a>i?(40-a)+i:(i-a))*9 + (b<a?(40-a)+b:(b-a))*9 + (c>b?(40-c)+b:(b-c))*9;

printf("%d\n",d);
}
return 0;
}

1. 其实国内大部分公司对算法都不够重视。特别是中小型公司老板根本都不懂技术，也不懂什么是算法，从而也不要求程序员懂什么算法，做程序从来不考虑性能问题，只要页面能显示出来就是好程序，这是国内的现状，很无奈。

2. 网站做得很好看，内容也多，全。前段时间在博客园里看到有人说：网页的好坏看字体。觉得微软雅黑的字体很好看，然后现在这个网站也用的这个字体！nice!

3. 第二个方法挺不错。NewHead代表新的头节点，通过递归找到最后一个节点之后，就把这个节点赋给NewHead，然后一直返回返回，中途这个值是没有变化的，一边返回一边把相应的指针方向颠倒，最后结束时返回新的头节点到主函数。