鱼C论坛

 找回密码
 立即注册
查看: 3327|回复: 10

[已解决]在长度为N的数组中找2个相同的数。

[复制链接]
发表于 2018-12-4 14:15:47 | 显示全部楼层 |阅读模式
4鱼币
1.jpg


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

最佳答案

查看完整内容

两个都是用C语言写的,这个是先排序,再求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0]);//数组的长度是sizeof(a)/sizeof(a[0]) 
        
        printf("排序前的数组:\n");
        for(j=0;j<length;j++){
                printf("a[%d] = %d\n",j,a[j]);
        }
        
        for(j=length;j>0;j--){
                max = 0;
                for(i=0;i<j;i++){
                        if(a[i]>max){
                        max = a[i];
                        num = i;//保存该轮循环中得到的最大数的下标
                }
                }
//这三的作用是将该轮循环得到的最大值与数组中的最后一个值进行交换
        temp = a[j-1];
        a[j-1] = max;//每轮循环得到的最大值被放在了数组最后,当两轮循环结束的时候,数组中的数就是从小到大排列的
        a[num] = temp;//通过之前标记的最大数下标实现对该最大数的准确替换
        
        }
        
        printf("排序后的数组:\n");
        for(j=0;j<length;j++){
                printf("a[%d] = %d\n",j,a[j]);
        }
        
        //排序结束后求重复两次的那个数 
                for(i=0;i<length;i++){ 
                
                if((a[i]-a[i+1])==0){
                printf("%d\n",a[i]);
                break;
        }        
        } 
        return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:17:09 | 显示全部楼层
个人觉得可以先排序后查找,但不知道怎么排序,请各位帮帮忙!谢谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-4 15:28:45 | 显示全部楼层
python 不是set
set(num)去掉多余的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0]);i>1;i--){ //数组的长度是sizeof(a)/sizeof(a[0]) 
                temp = a[i];
                for(j=0;j<i;j++){
                                
                if(temp==a[j]){
                        
        printf("%d\n",a[j]);
        }        
        }
        } 
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[20];
    int i,num[256]={0};
    printf("please input string:");
    scanf("%s",str);
    for(i=0;i<strlen(str);i++)
        num[(int)str[i]]++;
               
    for(i=0;i<256;i++)//打印出现次数
        if(num[i]!=0)
            printf("字符%c出现%d次\n",(char)i,num[i]);
}>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-4 19:19:51 | 显示全部楼层
本帖最后由 jiangjiang2016 于 2018-12-4 19:32 编辑

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

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







[/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

谢谢,想法很好,但作为计算机可能不知道,所以希望找个能让计算机自行解决问题的方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

谢谢!值得参照!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-5 13:03:42 | 显示全部楼层
zzh555945 发表于 2018-12-4 15:28
python 不是set
set(num)去掉多余的数

谢谢,但这道题主要使用C写的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-5 13:05:41 | 显示全部楼层
千亩计者 发表于 2018-12-4 14:15
两个都是用C语言写的,这个是先排序,再求解

谢谢!写得很详细!正在参照!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表