您的位置:首页 > 编程语言 > Java开发

HDU 6043(KazaQ's Socks) 规律题 Java

2017-07-25 18:56 316 查看
2017 Multi-University Training Contest - Team 1 1011题

找规律,分情况!!!

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.Scanner;

/**
* 题意:有 numOfSocks 双袜子序号分别为 1~numOfSocks,每天早上穿序号最小的那双,每天晚上放到篮子里,
*      当穿最后一双袜子的时候,会洗篮子里面的袜子(当天就干),问第 day 天穿的哪双袜子。
*
* 分析:找规律。
*      比如,输入的用例:3 7
*      每天穿的袜子编号:1 2 3 1 2 1 3 1 2 1 3
*      其中发现:1 2 3 之后的都是 1 2 、 1 3 , 也就是说在穿第 2/3 双袜子的那一天才洗袜子。
*      又比如: 4 9
*      每天穿的袜子编号: 1 2 3 4 1 2 3 1 2 4 1 2 3
*      其中又发现:1 2 3 4 之后的都是 1 2 3 、 1 2 4,也就是说在穿第 3/4 双袜子的那一天才洗袜子。
*  也就能说明了只有在穿第 numOfSocks/numOfSocks-1 双袜子的那一天,才洗袜子。
*  更进一步说明:numOfSocks 和 numOfSocks-1 是轮流来的。
*
* 解决:
*  1、当 day <= numOfSocks 时,直接输出 day
*  2、当 day > numOfSocks 时,分以下两种情况:
*      ①、当 (day-numOfSocks) % (numOfSocks-1) == 0 时,
*        i、(day-numOfSocks)/(numOfSocks-1) == 偶数时,输出 numOfSocks
*        ii、(day-numOfSocks)/(numOfSocks-1) == 奇数时,输出 numOfSocks-1
*      ②、否则输出 (day-numOfSocks) % (numOfSocks-1).
*
* @author TinyDolphin
*
*/
public class Main {

public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
BigInteger numOfSocks;
BigInteger day;
int count = 0;
while (in.hasNext()) {
numOfSocks = in.nextBigInteger();
day = in.nextBigInteger();
out.print("Case #" + (++count) + ": ");
if (day.compareTo(numOfSocks) <= 0) {
out.println(day);
} else {
if ((day.subtract(numOfSocks)).mod(numOfSocks.subtract(BigInteger.valueOf(1)))
.compareTo(BigInteger.valueOf(0)) != 0) {
out.println((day.subtract(numOfSocks)).mod(numOfSocks.subtract(BigInteger.valueOf(1))));
} else {
if ((day.subtract(numOfSocks)).divide(numOfSocks.subtract(BigInteger.valueOf(1)))
.mod(BigInteger.valueOf(2)).compareTo(BigInteger.valueOf(0)) == 0) {
out.println(numOfSocks);
} else {
out.println(numOfSocks.subtract(BigInteger.valueOf(1)));
}
}
}
}
out.flush();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: