Kitty喜欢小鱼干 发表于 2018-12-4 14:15:47

在长度为N的数组中找2个相同的数。



千亩计者 发表于 2018-12-4 14:15:48

本帖最后由 千亩计者 于 2018-12-4 17:38 编辑

两个都是用C语言写的,这个是先排序,再求解
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
        int a[] = {2,3,4,5,6,7,2};
        int i,j,max,num,length,temp,newlength;
        length = sizeof(a)/sizeof(a);//数组的长度是sizeof(a)/sizeof(a)
       
        printf("排序前的数组:\n");
        for(j=0;j<length;j++){
                printf("a[%d] = %d\n",j,a);
        }
       
        for(j=length;j>0;j--){
                max = 0;
                for(i=0;i<j;i++){
                        if(a>max){
                        max = a;
                        num = i;//保存该轮循环中得到的最大数的下标
                }
                }
//这三的作用是将该轮循环得到的最大值与数组中的最后一个值进行交换
        temp = a;
        a = max;//每轮循环得到的最大值被放在了数组最后,当两轮循环结束的时候,数组中的数就是从小到大排列的
        a = temp;//通过之前标记的最大数下标实现对该最大数的准确替换
       
        }
       
        printf("排序后的数组:\n");
        for(j=0;j<length;j++){
                printf("a[%d] = %d\n",j,a);
        }
       
        //排序结束后求重复两次的那个数
                for(i=0;i<length;i++){
               
                if((a-a)==0){
                printf("%d\n",a);
                break;
        }       
        }
        return 0;
}

Kitty喜欢小鱼干 发表于 2018-12-4 14:17:09

个人觉得可以先排序后查找,但不知道怎么排序,请各位帮帮忙!谢谢!!!

zzh555945 发表于 2018-12-4 15:28:45

python 不是set
set(num)去掉多余的数

千亩计者 发表于 2018-12-4 17:21:21

#include <stdio.h>

int main(){
       
        int a[] = {1,2,3,4,5,6,4};
        int i,j,temp;
       
        for(i=sizeof(a)/sizeof(a);i>1;i--){ //数组的长度是sizeof(a)/sizeof(a)
                temp = a;
                for(j=0;j<i;j++){
                                
                if(temp==a){
                       
        printf("%d\n",a);
        }       
        }
        }
       
        return 0;
}

luckyblyd 发表于 2018-12-4 18:26:06

排序方法可多了,有冒泡排序,插入排序,选择,希尔,归并,堆,快速,桶排序,但这些只要涉及排序,时间复杂度就不可能是N了
回归到题目上,这是一个问出现次数的,用排序就太麻烦了
我遇见过一个类似的,求一个字符串中每个字符出现次数,数字也是字符,当输入2345674时结果是4出现2次,2,3,5,6,7各出现一次,按自己需要稍微修改即可,代码如下
<#include<stdio.h>
#include<string.h>

void main()
{
    char str;
    int i,num={0};
    printf("please input string:");
    scanf("%s",str);
    for(i=0;i<strlen(str);i++)
      num[(int)str]++;
               
    for(i=0;i<256;i++)//打印出现次数
      if(num!=0)
            printf("字符%c出现%d次\n",(char)i,num);
}>

jiangjiang2016 发表于 2018-12-4 19:19:51

本帖最后由 jiangjiang2016 于 2018-12-4 19:32 编辑

我是看到下面的评论后得到的启发,不知道对题主有没有帮助:
如果一直到这些数中的最大数为:max;
需要查重的数组为a,长为n;
定义一个数组T={0};
for(int i=0;i<n;i++)
{
T++;

if(T>1){
printf(a【i】);
break;
}
}







Kitty喜欢小鱼干 发表于 2018-12-5 12:55:55

jiangjiang2016 发表于 2018-12-4 19:19
我是看到下面的评论后得到的启发,不知道对题主有没有帮助:
如果一直到这些数中的最大数为:max;
需要查 ...

谢谢,想法很好,但作为计算机可能不知道,所以希望找个能让计算机自行解决问题的方法。

Kitty喜欢小鱼干 发表于 2018-12-5 12:59:38

luckyblyd 发表于 2018-12-4 18:26
排序方法可多了,有冒泡排序,插入排序,选择,希尔,归并,堆,快速,桶排序,但这些只要涉及排序,时间复 ...

谢谢!值得参照!

Kitty喜欢小鱼干 发表于 2018-12-5 13:03:42

zzh555945 发表于 2018-12-4 15:28
python 不是set
set(num)去掉多余的数

谢谢,但这道题主要使用C写的!

Kitty喜欢小鱼干 发表于 2018-12-5 13:05:41

千亩计者 发表于 2018-12-4 14:15
两个都是用C语言写的,这个是先排序,再求解

谢谢!写得很详细!正在参照!!!
页: [1]
查看完整版本: 在长度为N的数组中找2个相同的数。