【问题标题】:Input Array in C and check for same values在 C 中输入数组并检查相同的值
【发布时间】:2017-12-26 07:30:48
【问题描述】:

我如何输入一个整数数组并检查 2 对值是否相等,并且我还想删除重复的数组以使数组中只有 1 个相同的值? 我想打印没有重复值的数组的最终结果。 我有这样的想法:

int a[SIZE], i;
 printf("Enter %d numbers:\n", SIZE);
 for (i = 0; i < SIZE; i++) {
  scanf_s("%d", a[i]);
 if(i>=1){
  if(a[i-1]==a[i]){
  a[i-1]==a[i];
  printf("%d", a[i-1]);
 }
}

这个结果给了我我需要的东西,但并不完全。 你能帮忙吗?

【问题讨论】:

  • if(i==1)...为什么?
  • 因为我想每次比较 2 个值,1-2,2-3,3-4 等。通过这种方式,我可以比较我输入的第一个值然后继续。如果我不这样做,我没有第一个值可以与第二个值进行比较。我可以这样做的另一个选项是,只有当我将第一个数字存储在某个值中时。
  • 您正在将每个数字与1 进行比较,即i == 1 ??
  • 一种方法是输入数组,对其进行排序,检查重复项,删除重复项,重复直到输入所需数量的不同值。另一种方法是,每次读取一个值(在第一个值之后)时,检查它是否已经在数组中,如果是则丢弃它。我将编写任何一种方法的代码作为练习。
  • @ThiruShetty 不,我不好,我想这样做 i>=1,当迭代器更大/等于 1(意味着我们在数组中的第二个元素上)

标签: c arrays loops sorting


【解决方案1】:

代码

#include<stdio.h>
int main() {
   int arr[20], i, j, k, size;
   printf("\nEnter array size:");
   scanf("%d", &size);
   printf("\nEnter Numbers:");
   for (i = 0; i < size; i++)
      scanf("%d", &arr[i]);
   printf("\nList of Unique Numbers:");
   for (i = 0; i < size; i++) {
      for (j = i + 1; j < size;) {
         if (arr[j] == arr[i]) {
            for (k = j; k < size; k++) {
               arr[k] = arr[k + 1];
            }
            size--;
         } else
            j++;
      }
   }
   for (i = 0; i < size; i++) {
      printf("%d ", arr[i]);
   }
}

说明

输入后,我们从第一个元素开始。然后在那个 for 循环中,我们有另一个 for 循环来检查该元素之后的元素。如果有重复,我删除它。希望这会有所帮助!

【讨论】:

  • 谢谢,会查的!只是想知道,如果使用这么多循环会影响效率吗?我刚开始学习 C 很抱歉,如果我可能会问一些愚蠢的问题 =/
  • 是的,我相信这是最有效的(至少我知道)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 2012-11-06
  • 1970-01-01
  • 2021-03-31
  • 2020-02-03
  • 2019-02-09
  • 1970-01-01
相关资源
最近更新 更多