min值输出错误,max和aver好像是对的 有无看看

img

这个怎么输出正确的呢 不会写不来帮忙看看为啥子错了,谢谢!检查了数组也没问题啊

寻找最大值和最小值,你这种写法是不对的,虽然偶然会得到正确的答案。正确的写法是
for(inti=0;i<m;i++)
{
if(min>a[i])min=a[i];
if(max<a[i])max=a[i];
}

条件判断那里错了,这样是两两比较,应该写成:
if (a[i]<min)
另外两个for循环可以合并起来

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/338987
  • 这篇博客你也可以参考下:编写一个函数max,接收两个整型参数,并返回他们中的较大值
  • 除此之外, 这篇博客: C语言——一维数组算法问题中的                   3.一直遍历找到重复最多的,找到后把计数器数组元素赋值给变量max(也                       就是出现次 数),计数器数组下标就是出现次数最多数的下标。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdio.h>
    int main()
    {
        int n,arr[1000],cnt[1000] = {0};        //cnt为计数器数组,需要初始化
        int i,j,k,max = 0;
        scanf("%d",&n);
        for(i = 0;i < n;i++)
        {
            scanf("%d",&arr[i]);
        }
        
        for(i = 0;i < n;i++)
        {
            for(j = 0;j < n;j++)
            {
                if(arr[i] == arr[j])        //找到一样的
                {
                    cnt[i] = cnt[i] + 1;    //cnt[i]++
                }
            }
        }
        
        for(i = 0;i < n;i++)
        {
            if(max < cnt[i])            //一直遍历直到找重复最多的
            {
                max = cnt[i];           //找到后赋值给max
                k = i;              //i就是重复最多的数的下标
            }
        }
        
        printf("出现次数最多的数字为:%d\n其出现次数为:%d",arr[k],max);  
        
        return 0;
    }

    本题要求给出n个元素的数组,从小到大排列,再输入一个num,插入到数组中, 使得新数组依旧是从小到大的顺序(用一个数组完成)。

    #include <stdio.h>
    int main()
    {
        int n,i,j;
        scanf("%d",&n);
        int arr[n],t1,t2,num,end;
        for(i = 0;i < n;i++)
        {
            scanf("%d",&arr[i]);
        }
        scanf("%d",&num);           //输入要插入的数字
        end = arr[n-1];             //保存倒数第二个元素
        
        if(num > end)               //考虑特殊情况,如果插入的数大于倒数第二个 
        {
            arr[n] = num;           //直接插入赋值
        }
        else
        {
            for(i = 0;i < n;i++)
            {
                if(arr[i] > num)    //如果原本的数大于插入的数
                {
                    t1 = arr[i];    //先保存原来的数
                    arr[i] = num;   //把插入的数放到原来数的位置
                    for(j = i + 1;j <= n;j++)       //处理原来的数
                    {
                        t2 = arr[j];            //原来的数到了后一位保存住
                        arr[j] = t1;            //把原来的数赋值给现在要存的这个位置上
                        t1 = t2;
                    }
                    break;
                }
            }
        }
        for(i = 0;i <= n;i++)               //注意这里i<=n,因为多插入了一个数字
        {
            printf("%d ",arr[i]);
        }
        return 0;
    }

     

    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯*AN−1)变换为(ANMAN−1A0A1⋯ANM−1)(最后M个数循环移至最前面的M*个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

    输入格式:

    每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

    输出格式:

    在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格

    输入样例:

    6 2 1 2 3 4 5 6

    结尾无空行

    输出样例:

    5 6 1 2 3 4

    结尾无空行