19_4_10.c

  1. 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字。

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字。
相同的数异或结果为零,零和任何数异或结果仍为那个数,所以将所有数依次异或,其中成对的将变为零,最终结果是只出现一次的两个数相异或的值。
假设这两个数为 x 和 y ,
result = x ^ y ,
position则是result的二进制形式下为1的位中最高的那一位,这一位即是 x 与 y 的二进制形式相异的位中最高的那一位,
依据这一位为 0 或为 1 将原数组分成两组,x 与 y 必然各自在其中一组,依次异或组内的数,原数组中相同的数必然成对的出现在某一组中,异或是他们为零,最终留下来的数就是组中只有一个的数,即 x 或是 y 。

void find_num(int* arr, int size)
{
 int i = 0;
 int result = 0;
 int position = 0;
 int x = 0;
 int y = 0;
 for (i = 0; i < size; ++i)
 {
  result ^= arr[i];
 }
 for (i = 0; i < 32; ++i)
 {
  if (result & (1 << i))
  {
   position = i;
  }
 }
 for (i = 0; i < size; ++i)
 {
  if (arr[i] & (1 << position))
  {
   x ^= arr[i];
  }
  else
  {
   y ^= arr[i];
  }
 }
 printf("%d\t%d\n", x, y);
}
  1. 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少瓶汽水
    循环实现,思路是手里有空瓶就优先用空瓶换,sum变量累加喝的汽水瓶数,bottle则是手中的空瓶数,money是剩余的钱数。
    注意一点是两个空瓶换一瓶汽水后,bottle减2再加1,换来的那瓶喝完了手里就又多一个瓶子。
    换到最后没钱了,手里也只剩一个空瓶子,循环结束,其实这里如果老板愿意借你一个空瓶,就可以再喝一瓶了!!!
int main()
{
 int money = 20;
 int bottle = 0;
 int sum = 0;
 while (money > 0 || bottle == 2)
 {
  if (bottle == 2)
  {
   ++sum;
   bottle = 1;
   continue;
  }
  ++sum;
  --money;
  ++bottle;
 }
 printf("%d\n", sum);
 system("pause");
 return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解释这段代码: always@(posedge sys_clk ) begin data_reg0 <= data_reg0_z; data_reg1 <= data_reg1_z; data_reg2 <= data_reg2_z; data_reg3 <= data_reg3_z; data_reg4 <= data_reg4_z; data_reg5 <= data_reg5_z; data_reg6 <= data_reg6_z; end i2c_device_a i2c_device_a( .i2c_sda (f_iic_sda), // .i2c_scl (f_iic_scl), // .sys_rst (sys_rst), .sys_clk (sys_clk), .data_out0 (data_out0), .data_out1 (data_out1), .data_out2 (data_out2), .data_out3 (data_out3), .data_out4 (data_out4), .data_out5 (data_out5), .data_out6 (data_out6), .data_out7 (data_out7), .data_out8 (data_out8), .data_out9 (data_out9), .data_out10 (data_out10), .data_out11 (data_out11), .data_out12 (data_out12), .data_out13 (data_out13), .data_out14 (data_out14), .data_out15 (data_out15), .data_out16 (data_out16), .data_out17 (data_out17), .data_out18 (data_out18), .data_out19 (data_out19), .data_out20 (data_out20), .data_out21 (data_out21), .data_out22 (data_out22), .data_out23 (data_out23), .data_out24 (data_out24), .data_out25 (data_out25), .data_in0 (data_out0), .data_in1 (data_out1), .data_in2 (data_out2), .data_in3 (data_out3), .data_in4 (data_out4), .data_in5 (data_out5), .data_in6 (data_out6), .data_in7 (data_out7), .data_in8 (data_out8), .data_in9 (data_out9), .data_in10 (data_out10), .data_in11 (data_out11), .data_in12 (data_out12), .data_in13 (data_out13), .data_in14 (data_out14), .data_in15 (data_out15), .data_in16 (data_out16), .data_in17 (data_out17), .data_in18 (data_out18), .data_in19 (data_out19), .data_in20 (data_out20), .data_in21 (data_out21), .data_in22 (data_out22), .data_in23 (data_out23), .data_in24 (VERSION0_Y[15:8]), .data_in25 (VERSION0_Y[7:0]), .data_in26 (VERSION0_M_D[15:8]), .data_in27 (VERSION0_M_D[7:0]), .data_in28 (VERSION0_V[15:8]), .data_in29 (VERSION0_V[7:0]) ); wire [7:0] data_out0; wire [7:0] data_out1; wire [7:0] data_out2; wire [7:0] data_out3; wire [7:0] data_out4; wire [7:0] data_out5; wire [7:0] data_out6; wire
05-30

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值