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

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

 

#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);
}

 

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


完整内容所在目录:http://www.mythroad.net/tag/q_written_examination_and_interview_code_title/


更多精彩内容来自:魔豆之路 - 神秘前路,待拨迷雾http://www.mythroad.net
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

do2jiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值