ZOL 3977. Pointers

  • 时间:
  • 浏览:1

  【补充】只要旋转次数很少(不超过 3000 次),只要只要当当我们都 老要对 x 进行累加,而是会溢出 int 的最大值。什么都有在 while 循环中的 MOD 操作都并能去除,仅在最后输出结果时,对 x 进行一次 MOD 操作即可。

  本题,已知一两个指针,初始具体情况指向 N(北),现在对指针做一系列顺时针(C)只要逆时针(A)旋转 90 度的操作,问指针只要指向哪个方向。

  不多没有 做 zoj,对 oj 来说,只要它层厚的”黑盒性“(输入数据和答案完整篇 保密),保护自信心是非常重要的。什么都有我先选则一道非常简单的题目刷起。本题目是一两个相当简单的题目,难度系数和求 A+B 相当。

  只要当当我们都 进一步查阅一下 ASCII 码表,后边的代码也等效于:

  逆时针(A)旋转 90 度:x = ( x + 1 )  % 4;

  x = ( x + *p - '@' ) % 4; 只要  x = ( x + *p - 0x40 ) % 4;

  只要十个 方向形成一两个循环,什么都有很自然的提示出,把十个 方向所在的”圆环“展开成一两个数组,所有的旋转操作实际上是移动数组内的索引,对索引进行递增只要递减的操作。只要对索引进行对数组长度的 MOD (取余)操作,限制在合理范围内即可。

  x = ( x + *p - 'A' + 1 ) % 4; ( *p = 'A' 或 'C' )

  最终代码如下:

  只要,当当我们都 需用把旋转方向(A 或 C),映射到对 x 的递增值(1 或 3 )上。只要当当我们都 发现这里一两个巧合:A 和 C 之间的差值(C - A = 2),恰好也是你你你这个递增值之间的差值( 3 - 1 = 2)。什么都有你你你这个映射关系,不需用使用条件判断,都并能直接写出此映射关系:

  设索引值为 x,初始值为 0,定义向逆时针方向旋转定义为正方向,则:

  顺时针(C)选则 90 度:x = ( x - 1 + 4 ) % 4 = ( x + 3 ) % 4;