C语言 有关数组查找

这系列问题

1,给定两个整型数组,本题要求找出不是两者共有的元素,并且要求要按从大到小的顺序输出。
(这是这几个题中打的算是很麻烦的了,可能我的方法不是最优的,但是还不会用指针,所以再慢慢进化吧)

输入示例
10
3 -5 2 8 0 3 5 -15 9 100
6 4 8 2 6 -5 9 0 100 8
输出
-15 3 4 5 6

#include <stdio.h>
int main()
{
 int n,a[50],b[50],o[50],i,j,m,q,c,d,p=0;
 int count=0,temp;
 while(~scanf("%d",&n))
 {
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);///////输入第一个数组
    }
    for(j=0;j<n;j++)
    {
       scanf("%d",&b[j]);//////输入第二个数组
    }
  ////////////////////////////////////////输入结束  
  for(i=0;i<n;i++)
  {
      d=0;
      c=0;
      for(j=0;j<n;j++)
      {
          if(a[i]!=b[j])
             c++;
                if(c==n) 
                {
                    for(m=i+1;m<n;m++)
                    {
                        if(a[i]==a[m])
                        {
                           d++;
                        }
                    }
                    if(d==0)
                    {
                        o[p]=a[i]; /////这个o[p]的作用就是最后输出....
                        p++;
                    }
                }
      }
      }
      /////作用是输出与b不同的a中数组数

  for(i=0;i<n;i++)
        {
            d=0;
            c=0;
            for(j=0;j<n;j++)
            {
                if(b[i]!=a[j])
                    c++;
                if(c==n)
                {
                    for(m=i+1;m<n;m++)
                    {
                        if(b[i]==b[m])
                        {
                            d++;
                        }
                    }
                    if(d==0)
                    {
                        o[p] = b[i];
                        p++;
                    }
                }
            }
        }
        ///////这里是输出b数组中不同a的数
            for(i=0;i<p-1;i++)
            {
                for(j=0;j<p-1-i;j++)
                {
                    if(o[j]>o[j+1])
                    {
                        temp=o[j];
                        o[j] = o[j+1];
                        o[j+1] = temp; ///让筛选出来的数组按顺序排列。
                    }                
                }
            }
            for(q=0;q<p;q++)
            {
                printf("%d ",o[q]);
            }
            printf("\n");
        }
 }

2,一个整型数组中(数组长度不超过20)除了两个数字之外,其他的数字都出现了两次。请写程序找出这2个只出现一次的数字。
输入示例
14
12 34 12 34 56 78 67 67 78 98 98 89 89 55
输出
56 55

#include <stdio.h>
int main()
{
    int n,a[100],m,count;
    while(~scanf("%d",&n))
    {   

        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        ////////////输入结束,开始进行操作。 
        for(int i=0;i<n;i++)
        {
            count=0;
            for(int j=0;j<n;j++)
            {
                if(a[i]!=a[j])
                {
                    count++;

                }
                //////如果有数没有相等的数,满足条件就计数加1.

            }
            if(count==n-1)
            {
                printf("%d ",a[i]);
            }

        }
    }
}

3, 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
输入
8
4 5 1 6 2 7 3 8
4
输出
1 2 3 4

#include <stdio.h>
int  main(){
    int n,k;
    scanf("%d",&n);
    int a[10];
    int i=0,j,temp;
    int m=n;
    while(m>0)
    {
       scanf("%d",&a[i]);
       m--;
       i++;
    }
    scanf("%d",&k);
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    for(i=0;i<k;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
}

4,在一个长度为n(n<20)的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
输入
7
2 3 1 0 2 5 3
输出
2

#include <stdio.h>
int main()
{
    int n,a[100],m;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        /////////输入。 
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(a[i]==a[j])
                {
                    m=1;
                    break;
                }       
            }
            if(m==1) ////第一个相等的数字
            {
                printf("%d\n",a[i]);
                break;  
            }

        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40571965/article/details/78634447
今日推荐