首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Ural 1095 Nikifor 三 数论

2012-08-26 
Ural1095Nikifor 3数论来源:http://acm.timus.ru/problem.aspx?space1&num1095题意:给你一个数,其中包含

Ural 1095 Nikifor 3 数论

来源:http://acm.timus.ru/problem.aspx?space=1&num=1095

题意:给你一个数,其中包含数字1 2 3 4,让你对这个数的数字重新排列,使其目的数能被7整除。

思路:经过计算发现,1234有24种全排列,对7取余,其中包含了0,1,2,3,4,5,6这7种情况。所以,只需要计算除去1 2 3 4以外的数对7取余的结果,然后让后面的1234对其补余即可。需要注意一种特殊情况如1001234,在去1234时,把第一个1去掉了,这样的后果是求出的去掉1234后的数为1.为防止这种情况,可以最后补0。本来以为用到大数,所以用java写的。其实用C++完全可以搞定。。

代码:

import java.util.*;import java.math.BigInteger;public class Main {public static void main(String[] args){      Scanner cin = new Scanner(System.in);      int numcase;      numcase = cin.nextInt();      for(int j = 1; j <= numcase; ++j){      BigInteger n;      int flag1 = 0,flag2 = 0,flag3 = 0,flag4 =0;      n = cin.nextBigInteger();      String ss = n.toString();      BigInteger x = new BigInteger("0");      BigInteger x1 = new BigInteger("1");      BigInteger x2 = new BigInteger("2");      BigInteger x3 = new BigInteger("3");      BigInteger x4 = new BigInteger("4");      BigInteger x5 = new BigInteger("5");      BigInteger x6 = new BigInteger("6");      BigInteger sum = x ;      char ch[] = ss.toCharArray();      int cntzero = 0;      for(int i = 0;i < ss.length(); ++i){      if(ch[i] == '1' && flag1 == 0){      flag1 = 1;      continue;      }      else if(ch[i] == '2' && flag2 == 0){      flag2 = 1;      continue;      }      else if(ch[i] == '3' && flag3 == 0){      flag3 = 1;      continue;      }      else if(ch[i] == '4' && flag4 == 0){      flag4 = 1;      continue;      }      else if(ch[i] == '0'){      cntzero++;      continue;      }      int y = ch[i] - '0';      BigInteger z = new BigInteger(""+y);      BigInteger zz = new BigInteger("10");      sum = sum.multiply(zz);      sum = sum.add(z);      }      BigInteger p = new BigInteger("10000");      sum = sum.multiply(p);      ss = sum.toString();    //  System.out.println(ss);      BigInteger q = new BigInteger("7");      BigInteger mm = sum.mod(q);      mm = q.subtract(mm);      ss = mm.toString();     // System.out.println(ss);      BigInteger ans;      if(mm.compareTo(q) == 0){      ans = new BigInteger("3241");      sum = sum.add(ans);      ss = sum.toString();      System.out.print(ss);      }      else if(mm.compareTo(x1) == 0){      ans = new BigInteger("1324");      sum = sum.add(ans);      ss = sum.toString();      System.out.print(ss);      }      else if(mm.compareTo(x2) == 0){      ans = new BigInteger("1234");      sum = sum.add(ans);      ss = sum.toString();      System.out.print(ss);      }      else if(mm.compareTo(x3) == 0){      ans = new BigInteger("2341");      sum = sum.add(ans);      ss = sum.toString();      System.out.print(ss);      }      else if(mm.compareTo(x4) == 0){      ans = new BigInteger("1243");      sum = sum.add(ans);      ss = sum.toString();      System.out.print(ss);      }      else if(mm.compareTo(x5) == 0){      ans = new BigInteger("1342");      sum = sum.add(ans);      ss = sum.toString();      System.out.print(ss);      }      else if(mm.compareTo(x6) == 0){      ans = new BigInteger("2134");      sum = sum.add(ans);      ss = sum.toString();      System.out.print(ss);      }      for(int k = 0; k < cntzero; ++k)      System.out.print(0);      System.out.println();      }}}


热点排行