【问题标题】:I am writing a code to find out the difference between the total no. of 1s and 0s in a binary number, using Arrays我正在编写代码以找出总数之间的差异。二进制数中的 1 和 0,使用数组
【发布时间】:2021-03-08 06:57:14
【问题描述】:

我的输入是,比如说,

4
1100

这里的'4'是数组的位数。

我想让它扫描 arr[0]=1, arr[1]=1, arr[2]=0, arr[3]=0

但它正在扫描 arr[0]=1100 然后是随机垃圾。 如何解决这个问题?

  • 随机垃圾的含义,arr[1]=-1627,arr[2]=66 和任何随机的东西。

不过我很确定,我的其余代码是正确的。


#include <stdio.h>
int main() {
  
    int n,i,t,chk1,chk0,fin;
  scanf("%1d",&n);
  int arr[n];
  
  for(i=0;i<n;i++){
   scanf("%d",&arr[i]); 
  }
  i=0;
  chk1=0;
  chk0=0;
  do{
    if(arr[i]==0){
      chk0=chk0+1;}
   else{
     chk1=chk1+1;}
 
    i++;
  }while(i<n);

  
  if(chk1>chk0){
      fin=chk1-chk0;
  }
  else if(chk1<chk0){
      fin=chk0-chk1;
  }
  else{
fin=0;  
  }
  
  printf("%d",fin);
    return 0;
}

【问题讨论】:

  • 我看不出在这里使用数组的意义。只需将int 计数器设置为零,然后一次读取一个字符(例如,使用getchar())。每当此字符等于1 时,计数器就会增加,每次此字符等于0 时,计数器就会减少。
  • 为什么不将二进制数存储为二进制?而不是“十进制编码二进制”或任何这种格式。
  • @r3mainer,我刚试过,但没用。
  • #include int main() { int n; scanf("%d",&n);整数计数,i,c;计数=0;我=1;做{ c=getchar(); if(c==1){ 计数++; } 其他{ 计数--; } 我++; }while(i

标签: arrays c binary integer scanning


【解决方案1】:

这显然是因为scanf("%d",&amp;arr[i]) 读出了整数。对于scanf,1100 是一个整数。因此在这个循环的第一次迭代之后:

for(i=0;i<n;i++){
  scanf("%d",&arr[i]); 
}

arr[0] 等于 1100。

【讨论】:

  • 是的,我明白了,但是解决办法是什么?
  • @obsidian 你可以使用std::cin.get()。看看这个,希望对你有帮助
【解决方案2】:

您在 cmets 中发布的代码非常接近正确的解决方案。只有两个问题:

  1. c=getchar(); if(c==1) { /* ... */ }
    

getchar() 的返回值——正如你所料——是一个字符。如果你的输入包含字符'1',那么getchar()不会返回值1,而是这个字符对应的ASCII值,恰好是49。字符'0'的ASCII值是48。但是您不需要记住这些值,只需将'0''1' 放在您想要这些值的代码中,而不是01

  1. else{ count--; }
    

这一行假设getchar() 将看到的唯一字符是'0''1'。但是,您可能会发现在调用scanf() 之后,输入缓冲区中仍然会有一个换行符在等待您。您可以在 while() 循环之前插入对 getchar() 的额外调用以清除此字符,或者在循环内显式检查 '0''1'

这是您的代码的固定版本。我去掉了变量i,因为你还不如使用n来计算输入数字。

#include <stdio.h>

int main() {
    int n, c, count=0;
    scanf("%d",&n);
    while (n > 0) {
        c = getchar();
        if (c == '1') {
            count++;
            n--;
        }
        else if (c == '0') {
            count--;
            n--;
        }
    }
    printf("%d\n", count);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2016-07-21
    • 2019-09-04
    • 2016-11-14
    相关资源
    最近更新 更多