计算机组织与结构第二道题目的JAVA解法

原创 2005年04月26日 17:03:00

import java.io.*;

public class Solution{
 public static void main(String[] args){
  /*int[] a=new int[11];
  int[] back=new int[11];
  int[] m=new int[11];
  int[] negm=new int[11];
  int[] q=new int[11];*/
  
  int[] a={1,1,1,1,1,1,1,1,1,1,1,1};
  int[] back={1,1,1,1,1,1,1,1,1,1,1,1};
  int[] m={0,0,0,0,0,0,0,0,1,1,0,1};
  int[] negm={1,1,1,1,1,1,1,1,0,0,1,1};
  int[] q={1,1,1,1,0,1,1,0,1,1,1,1};
  String flag=new String("+");
  boolean suc=true;
  
  printArray(a);
  System.out.print("/t");
  printArray(q);
  System.out.print("/t");
  System.out.println("Initial");
  
  for(int n=0;n<12;n++){
   shift(a);
   a[a.length-1]=q[0];
   shift(q);
   back=copy(a);
   printArray(a);
   System.out.print("/t");
   printArray(q);
   System.out.print("/t");
   System.out.println("Shift");
   
   if(a[0]==m[0]){
    a=add(a,negm);
    printArray(a);
    System.out.print("/t/t/t");
    System.out.println("-");
   }
   else{
    a=add(a,m);
    printArray(a);
    System.out.print("/t/t/t");
    System.out.println("+");
   }
   
   if(a[0]==back[0]) suc=true;
   else suc=false;
   
   if(suc||zero(a)) set(q,1);
   if(!suc&&!zero(a)){
    set(q,0);
    a=copy(back);
    printArray(a);
    System.out.print("/t");
    printArray(q);
    System.out.print("/t");
    System.out.println("Backup");
    
   }
   
  }
  
  
  
 }
 
 public static int[] add(int[] a,int[] b){
  int c=0;
  int index;
  int[] result=new int[12];
  for(index=a.length-1;index>-1;index--){
   result[index]=(a[index]+b[index]+c)%2;
   c=(a[index]+b[index]+c)/2;
   //System.out.println(c);
  }
  return result;
  
 }
 
 public static void shift(int[] a){
  int index;
  for(index=0;index<a.length-1;index++){
   a[index]=a[index+1];
  }
  a[index]=0;
  
 }
 
 public static void set(int[] q,int value){
  if(q[q.length-1]!=value){
   q[q.length-1]=value;
   System.out.print("/t/t");
   printArray(q);
   System.out.print("/t");
   System.out.println("Set "+value);
   
  }
 }
 
 public static int[] copy(int[] source){
  int[] aim=new int[source.length];
  for(int index=0;index<source.length;index++)
   aim[index]=source[index];
  return aim;
 }
 
 public static boolean zero(int[] a){
  boolean f=true;
  for(int i=0;i<a.length;i++){
   if(a[i]!=0) f=false;
  }
  return f;
 }
 
 public static void printArray(int[] arr){
  for(int i=0;i<arr.length;i++){
   System.out.print(arr[i]);
   if((i+1)%4==0&&(i+1)!=arr.length)
    System.out.print(',');
  }
 }
}

附答案:

1111,1111,1111 1111,0110,1111 Initial
1111,1111,1111 1110,1101,1110 Shift
0000,0000,1100   +
1111,1111,1111 1110,1101,1110 Backup
1111,1111,1111 1101,1011,1100 Shift
0000,0000,1100   +
1111,1111,1111 1101,1011,1100 Backup
1111,1111,1111 1011,0111,1000 Shift
0000,0000,1100   +
1111,1111,1111 1011,0111,1000 Backup
1111,1111,1111 0110,1111,0000 Shift
0000,0000,1100   +
1111,1111,1111 0110,1111,0000 Backup
1111,1111,1110 1101,1110,0000 Shift
0000,0000,1011   +
1111,1111,1110 1101,1110,0000 Backup
1111,1111,1101 1011,1100,0000 Shift
0000,0000,1010   +
1111,1111,1101 1011,1100,0000 Backup
1111,1111,1011 0111,1000,0000 Shift
0000,0000,1000   +
1111,1111,1011 0111,1000,0000 Backup
1111,1111,0110 1111,0000,0000 Shift
0000,0000,0011   +
1111,1111,0110 1111,0000,0000 Backup
1111,1110,1101 1110,0000,0000 Shift
1111,1111,1010   +
  1110,0000,0001 Set 1
1111,1111,0101 1100,0000,0010 Shift
0000,0000,0010   +
1111,1111,0101 1100,0000,0010 Backup
1111,1110,1011 1000,0000,0100 Shift
1111,1111,1000   +
  1000,0000,0101 Set 1
1111,1111,0001 0000,0000,1010 Shift
1111,1111,1110   +
  0000,0000,1011 Set 1

关于微软面试100题系列中两道题目的个人解法

最近为了准备找工作,刷了July大神整理的微软100题系列,中间有两道题目在原博主文中并没有给出很好地解决方案,在此文中给出个人的解法,希望抛砖引玉,请求大神给予指导。 第一道是30题,原题描述如...

2015考研 杭电 计算机学院 复试笔试题第一题 JAVA语言解法

杭电 2015年考研 计算机学院 复试笔试第一题 JAVA解法 import java.util.Scanner; import java.util.regex.Matcher; import jav...

第二天,第二道经典面试题 Java版本,可运行

题目描述: 简单的题目一: 通过键盘输入一串小写字母(a--z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则:     1、仅...

第二道题:括号配对问题

这道题着实费了我不少时间(90分钟==。),问题的关键是怎么全面判断括号是否配对,我原来的思路是比较各个括号的个数,毫无疑问,这会漏掉许多情况,比如 ] [ 、[ ( ] )…然后我就打算直接比较字符...

CCF计算机职业资格认证 2015年3月第2题 数字排序 解法和思路

问题描述   给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式   输入的第一行包含一个整数n,表示给定数字的个数。   第二行包含n个整数,相邻...

计算机图形的简单概念了解(目的是了解GPU相关feature含义)

Table of Contents 1. 引言 2. 导论2.1. 图形概念 2.2. 图形的表示方法 2.3. 图形的操作 2.4. 什么是光栅? 2.5. 锯齿 2.6. 帧和位平面 2.7. 最...

计算机学者发表论文的目的与追求

  • 2012年05月24日 11:30
  • 2.79MB
  • 下载

java并发编程--一道经典多线程题的2种解法

Java代码   "line-height: 18px; white-space: normal;">coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]   ...
  • xdy3008
  • xdy3008
  • 2012年09月13日 17:03
  • 1492
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算机组织与结构第二道题目的JAVA解法
举报原因:
原因补充:

(最多只允许输入30个字)