丸子酱ovo 发表于 2021-1-29 17:27:35

c语言作业题

【问题描述】输入一组无序的整数,输出其中出现次数最多的整数及其出现次数。


10

0-5006325813-509-500632

【样例输出】

-50 3

0 3

哪里出错了


#include "stdio.h"
#include "string.h"
int main()
{
      int i,j, n;
      int flag,count;
      int arr;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
            scanf("%d",arr);
      }

         for(i=0;i<n-1;i++)
         {
            for(j=1;j<=n;j++)
            {
                if(arr==arr)
                  {

                     flag=arr;
                     count=0;
                     count++;
                  }

            }

            {
                printf("%d",flag);
                printf("%d",count);
            }
         }

      return 0;

}

jackz007 发表于 2021-1-29 18:10:36

本帖最后由 jackz007 于 2021-1-29 18:13 编辑

#include <stdio.h>

int main(void)
{
      int i , j , k , n , m , t , arr , dat , cnt                         ;
      scanf("%d" , & n)                                                                  ;
      for(i = 0 ; i < n ; i ++) scanf("%d" , & arr)                                 ; // 读入数据
      for(dat = arr , i = m = 1 ; i < n ; i ++) {                                    // 把 arr 中总共 m 个不同数据存入 dat 中
                for(k = 0 ; k < m && arr != dat ; k ++)                              ; // 把 arr 中总共 m 个不同数据存入 dat 中
                if (k == m) dat = arr                                             ; // 把 arr 中总共 m 个不同数据存入 dat 中
      }                                                                                    // 把 arr 中总共 m 个不同数据存入 dat 中
      for(i = 0 ; i < m - 1 ; i ++) {                                                      // 对 dat[] 按从小到大的顺序排序
                for(j = i + 1 ; j < m ; j ++) {                                              // 对 dat[] 按从小到大的顺序排序
                        if(dat > dat) {                                                // 对 dat[] 按从小到大的顺序排序
                              t = dat                                                 ; // 对 dat[] 按从小到大的顺序排序
                              dat = dat                                          ; // 对 dat[] 按从小到大的顺序排序
                              dat = t                                                 ; // 对 dat[] 按从小到大的顺序排序
                        }                                                                  // 对 dat[] 按从小到大的顺序排序
                }                                                                            // 对 dat[] 按从小到大的顺序排序
      }                                                                                    // 对 dat[] 按从小到大的顺序排序
      for(i = 0 ; i < m ; i ++) cnt = 0                                             ; // 初始化计数数组 cnt
      for(i = 0 ; i < m ; i ++) for(j = 0 ; j < n ; j ++) if(dat == arr) cnt ++ ; // 用 cnt 对 arr 进行不同数值的统计计数
      for(k = 0 , i = 1 ; i < m ; i ++) if(cnt > cnt) k = i                        ; // 找到出现次数的多的次数,k 是索引。
      for(i = 0 ; i < m ; i ++) if(cnt == cnt) printf("%d %d\n" , dat , cnt) ; // 把最多次数的数及出现次数统统显示出来
}

2736946915 发表于 2021-1-29 19:52:23

1.为啥声明变量不初始化?
2.scanf("%d",&n);scanf("%d",arr);把你这个改成scanf_s应该就可以了,边界安全问题,应该是编译器阻止了

丸子酱ovo 发表于 2021-1-29 22:47:18

jackz007 发表于 2021-1-29 18:10


jackz007 发表于 2021-1-29 23:00:52

      你的理解是正确的,有这个学习态度一定能学好,加油!
页: [1]
查看完整版本: c语言作业题