HardBirch

2010年广州周立功单片机(致远电子) 机试题(5)答案

时间:09-09-21 栏目:系统技术篇 作者:鲁智森也有文化 评论:0 点击: 1,485 次

答案不标准也不一定是最佳,仅供参考

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int SearchFlag(char *flag)
{
 int i;
 int ee = sizeof(flag);
 for(i=0 ; i<ee; i++)
 {
  if(flag[i] == 0)
   return 1;
 }
 return 0;
}

int SearchValue(int e,int n)
{
 int i,s=1;
 if(e == 0)
  return 1;
 if(s == e)
   return 1;
 for(i=0 ; i<n; i++)
 {  
  s*=2;
  if(s == e)
   return 1;  
  if(s > e)
   return 0;
 }
 return 0;
}

char* ToXBase(int x,unsigned int n,char *s)
{
 int i=0,j;
 char ch;
 while(x >= n)
 {
  itoa(x%n,&s[i],33);
  x=x/n;
  i++;
 }
 itoa(x%n,&s[i],33);

 for(j=0;j<i;i--,j++)//前后交换
 {
  ch=s[j];
  s[j]=s[i];
  s[i]=ch;
 }
 return s;
}

void GenGrayNbit(int i32BitNum)
{
 unsigned int i;
 unsigned int n=1;
 char s[33];
 for(i=0 ; i<i32BitNum ; i++)
 {
  n *=2;
 }
 int GrayNow,GrayLast=0;
 char *flag = new char[n];
 for(i=0 ; i< n; i++)
 {
  flag[i]=0;
 }

 for(GrayNow=0 ; SearchFlag(flag) ; )
 {
  int e=GrayLast^GrayNow;
  if((SearchValue(e,n)) && (flag[GrayNow]==0))
  {
   ToXBase(GrayNow,2,s);
   for(unsigned int j=0 ; j< i32BitNum -strlen(s) ; j++)
   {
    printf("%d",0);
   }
   printf("%s ",s);
   flag[GrayNow]=1;
   GrayLast = GrayNow;
  } 
  GrayNow++;
  if(GrayNow > n)
   GrayNow = 0;
 }
 printf("/n");
}

 

void main()
{
 GenGrayNbit(2);
 printf("/n");
 GenGrayNbit(3);
 printf("/n");
 GenGrayNbit(4);
 printf("/n");
 GenGrayNbit(5);
 printf("/n");
 GenGrayNbit(6);
 printf("/n");
 GenGrayNbit(1);
}

 

 

 

以上程序在判断相邻格雷码是否只有一位不一样这个问题时候,效率不高,有更加高效的方法,欢迎评论~~~

声明: 本文由( 鲁智森也有文化 )原创编译,转载请保留链接: 2010年广州周立功单片机(致远电子) 机试题(5)答案

2010年广州周立功单片机(致远电子) 机试题(5)答案:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐