UVa1594 (java版)

题目就是对于一个n元组,去一个数与后一个数的差值的绝对值,构成新的n元组,很简单的题,可是我写了很久。。逻辑思维不太行吧
我自己卡在:
(1)最后一个数字的执行没有加任何条件放在了减数据的循环里面,一个循环结束后,最后一个数字已经执行了n-1次。
(2)怎么把这个字符串的其他东西去掉把数字留下放入自己建的数组中。
解决:
(1)定义一个time=1;每执行一次time++ 当time等于一定值的时候才执行最后一个数字的减法运算。
(2)用split方法用正则表达式("\D+")就可以将除了数字以外的东西全部去掉了,当然这是String的函数,我们得到后在把String利用Integer化为整数就好了(不要想着把输入的直接放到利用String的方法toCharArray转化为字符数组在去算)第一:这样我们得到的字符型跟整形要一直转化,很麻烦 。 第二:就算你不嫌麻烦,字符型只能存一个字符,也就是说你想输入比9大的整数是执行不了的,所以我们这里要用到正则表达式。
上代码:

import java.util.Scanner;
public class UVa1594 {
 public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  int a[] = new int [4];
  int count = 0,t1 = 0;
  String s[] = sc.next().split("\\D+"); // 去掉非数字以外的字符
  for(int i = 0;i < s.length-1;i++)
   a[i] = Integer.parseInt(s[i+1]); // 字符串转整形
  for(int i = 0;i < 1000;i++){  // 1000次
   int time = 1;
   t1 = a[0];                     // 保存第一个值,不然第一个值会改变,最后一个值会用到第一个值
   for(int j = 0;j < a.length-1;j++){ // 将c[0]到c[length-1]算完, 不能算最后一个因为最后一个加一个超出
    a[j] =  z(a[j+1] - a[j]);
    time++; // 当执行完前面的数据后 才执行最后一个数据
    if(time == 4){
       a[a.length-1] = z(a[a.length-1] - t1);
       time = 1;
    }
   }
  }
  for(int i = 0;i < a.length;i++){
   if(a[i] == 0)
    count++;
  }
  if(count == a.length){
   System.out.println("变为0");
   System.exit(0);
  }
  else
   System.out.println("循环了");
 }
 public static int z(int x){
  if(x < 0)
   return -x;
  else
   return x;
 }

一个逻辑很简单的题,自己却写了很久,真的很难受,加油吧

你可能感兴趣的:(UVa1594 (java版))