欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于C語言一維數(shù)組算法問題詳解

 更新時間:2021年11月16日 13:04:30   作者:_Daisy_  
數(shù)組是以順序格式排列的均勻數(shù)據(jù)的集合,在C語言中學(xué)習(xí)數(shù)組的概念非常重要,因?yàn)樗腔镜臄?shù)據(jù)結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于C語言一維數(shù)組算法問題的相關(guān)資料,需要的朋友可以參考下

問題1:將數(shù)組中的數(shù)逆序存放

本題要求編寫程序,將給定的n個整數(shù)存入數(shù)組中,將數(shù)組中的這n個數(shù)逆序存放, 再按順序輸出數(shù)組中的元素。

算法描述:1.向數(shù)組a中輸入元素;

2.定義一個新數(shù)組new,將數(shù)組a中的元素倒序存放;

3.將數(shù)組b正序輸出,注意結(jié)尾無空格的格式問題。

代碼實(shí)現(xiàn) : 

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int i,arr[n];
    for(i = 0;i < n;i++)
    {
        scanf("%d",&arr[i]);
    }
    
    int new[n],j;					//定義一個數(shù)組new用來存入數(shù)組a的逆順序
    for(int j = 0;j < n;j++)
    {
        new[j] = arr[n-1-i];		//倒序存入
    }
    for(int k = 0;k < n - 1;k++)	//數(shù)組中最后一個元素不一起輸入,保持結(jié)尾無空格
    {
        printf("%d ",new[k]);		
    }
    	printf("%d",new[n-1]);		//輸出最后一個元素
    return 0;
}

運(yùn)行結(jié)果:


問題2:求數(shù)組中最大值及其下標(biāo)

本題要求編寫程序,找出給定的n個數(shù)中的最大值及其對應(yīng)的最小下標(biāo)(下標(biāo)從0開始)。 輸入格式: 輸入在第一行中給出一個正整數(shù)n(1<n≤10)。第二行輸入n個整數(shù),用空格分開。 輸出格式: 在一行中輸出最大值及最大值的最小下標(biāo),中間用一個空格分開。

算法描述:1.向數(shù)組中存放元素;

2.把數(shù)組中第一個元素先定義一個變量保存住;

3.遍歷數(shù)組,如果比保存第一個元素的變量大,那就賦值給那個變量,直到變量值變?yōu)樽畲螅?/p>

4.定義一個變量用來記錄最大值的下標(biāo)。

代碼實(shí)現(xiàn):

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int arr[n],i;
    for(i = 0;i < n;i++)
    {
        scanf("%d",&arr[i]);
    }
    
    int max = arr[0];               //定義一個變量保存數(shù)組第一個元素
    for(int j = 1;j < n;j++)
    {
        if(max < arr[j])            //如果小于就一直給m,直到找到最大值停
        {
            max = arr[j];       
        }
     }
    for(int num = 0;num < n;num++)  //記錄最大值下標(biāo)操作
    {
        if(arr[num] == max)
        {
            printf("最大值為:%d\n其下標(biāo)為:%d",max,num);
            break;
        }
    }
    return 0;
}

運(yùn)行結(jié)果:

問題3:找出不是兩個數(shù)組的共有元素

本題要求給定兩個整型數(shù)組,本題要求找出不是兩者共有的元素。

算法描述:1.分別定義兩數(shù)組并輸入值;

2.用數(shù)組a中元素對比數(shù)組b中元素,非共有值放入c中(此處可以用一個 標(biāo)志變量flag,標(biāo)志 是否有共有值);

3.用數(shù)組b中元素對比數(shù)組a中元素,重復(fù)“2”操作;

4.最后先輸出數(shù)組c中第一個元素,然后判斷元素是否與之前錄入元素

重復(fù)。

5.最后打印出來數(shù)組c中的元素,也就是非共有值,此處注意格式問題。

代碼實(shí)現(xiàn):

#include <stdio.h>
int main()
{
    int n;                      
    scanf("%d",&n);
    int arr1[n],i;                      //定義第一個數(shù)組
    for(i = 0;i < n;i++)
    {
        scanf("%d",&arr1[i]);
    }
    
    int m;
    scanf("%d",&m);
    int arr2[m],j;                      //定義第二個數(shù)組
    for(j = 0;j < m;j++)
    {
        scanf("%d",&arr2[j]);
    }
    
    int k,rem[20] = {};                 //數(shù)組rem是用來記錄非公有值的
    for(i = 0;i < n;i++)
    {
        int flag = 0;                   //定義標(biāo)志變量用來標(biāo)志是否有非共有值
        for(j = 0;j < m;j++)        
        {
            if(arr1[i] == arr2[j])  //用數(shù)組1中元素對比數(shù)組2中元素,非共有值放入數(shù)組rem中
            {
                flag = 1;
            }
        }
        if(flag == 0)
        {
            rem[k] = arr1[i];
            k++;
        }
    }
    
    for(i = 0;i < m;i++)        //用數(shù)組2中元素對比數(shù)組1中元素,非共有值放入數(shù)組rem中
    {
        int flag = 0;
        for(j = 0;j < n;j++)
        {
            if(arr2[i] == arr1[j])
            {
                flag = 1;
            }
        }
        if(flag == 0)
        {
            rem[k] = arr2[i];
            k++;
        }
    }
    
    printf("非共有元素:%d",rem[0]);      //輸出rem中第一個元素
    for(i = 1;i < k;i++)
    {
        for(j = 0;j < i;j++)
        {
            if(rem[i] == rem[j])
            {
                break;
            }
        }
        if(j >= i)
        {
            printf(" %d",rem[i]);   //因?yàn)樘崆拜敵龅谝粋€元素,所以后面要打一個空格再打元素,                                                                                         
                                    //結(jié)尾無空格的格式問題
        }
    }
    return 0;
}

運(yùn)行結(jié)果:

問題4:找出出現(xiàn)次數(shù)最多的數(shù)

本題要求統(tǒng)計(jì)一個整型序列中出現(xiàn)次數(shù)最多的整數(shù)及其出現(xiàn)次數(shù)。

輸入格式: 輸入在一行中給出序列中整數(shù)個數(shù)N(0<N≤1000),以及N個整數(shù)。數(shù)字間以空格分隔。

輸出格式: 在一行中輸出出現(xiàn)次數(shù)最多的整數(shù)及其出現(xiàn)次數(shù),數(shù)字間以空格分隔。題目保證這樣的數(shù)字是唯一的

算法描述:1.定義兩個數(shù)組,一個用來存放元素,另一個用來當(dāng)計(jì)數(shù)器,此數(shù)組注意需 要初始化;

2.在這個數(shù)組中找到重復(fù)的,然后把計(jì)數(shù)器數(shù)組賦值+1;

3.一直遍歷找到重復(fù)最多的,找到后把計(jì)數(shù)器數(shù)組元素賦值給變量max(也 就是出現(xiàn)次 數(shù)),計(jì)數(shù)器數(shù)組下標(biāo)就是出現(xiàn)次數(shù)最多數(shù)的下標(biāo)。

代碼實(shí)現(xiàn):

#include <stdio.h>
int main()
{
    int n,arr[1000],cnt[1000] = {0};        //cnt為計(jì)數(shù)器數(shù)組,需要初始化
    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])            //一直遍歷直到找重復(fù)最多的
        {
            max = cnt[i];           //找到后賦值給max
            k = i;              //i就是重復(fù)最多的數(shù)的下標(biāo)
        }
    }
    
    printf("出現(xiàn)次數(shù)最多的數(shù)字為:%d\n其出現(xiàn)次數(shù)為:%d",arr[k],max);  
    
    return 0;
}

運(yùn)行結(jié)果:

問題5:數(shù)組中插入數(shù)字并排序

本題要求給出n個元素的數(shù)組,從小到大排列,再輸入一個num,插入到數(shù)組中, 使得新數(shù)組依舊是從小到大的順序(用一個數(shù)組完成)。

算法描述:1.定義一個數(shù)組并存放元素,單獨(dú)記錄好倒數(shù)第二個元素;

2.輸入要插入的數(shù)字,注意可以考慮特殊情況,如果插入的數(shù)大于原本倒數(shù) 第二個數(shù),就可以 直接插入賦值為最后一個元素;

3.再來考慮一般情況,遍歷數(shù)組,如果原本的數(shù)大于要插入的數(shù),先保存住 原來的數(shù)字,然 后把插入的數(shù)放入到原來的數(shù)的位置;

4.插入之后,原本的數(shù)就到了后一位,需要把后一位的位置保存住,把原本 的數(shù)放到后一 位,再把位置賦上原本數(shù)的值;

5.最后遍歷輸出數(shù)組元素 。

代碼實(shí)現(xiàn) :

#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);           //輸入要插入的數(shù)字
    end = arr[n-1];             //保存倒數(shù)第二個元素
    
    if(num > end)               //考慮特殊情況,如果插入的數(shù)大于倒數(shù)第二個 
    {
        arr[n] = num;           //直接插入賦值
    }
    else
    {
        for(i = 0;i < n;i++)
        {
            if(arr[i] > num)    //如果原本的數(shù)大于插入的數(shù)
            {
                t1 = arr[i];    //先保存原來的數(shù)
                arr[i] = num;   //把插入的數(shù)放到原來數(shù)的位置
                for(j = i + 1;j <= n;j++)       //處理原來的數(shù)
                {
                    t2 = arr[j];            //原來的數(shù)到了后一位保存住
                    arr[j] = t1;            //把原來的數(shù)賦值給現(xiàn)在要存的這個位置上
                    t1 = t2;
                }
                break;
            }
        }
    }
    for(i = 0;i <= n;i++)               //注意這里i<=n,因?yàn)槎嗖迦肓艘粋€數(shù)字
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

運(yùn)行結(jié)果:

 

問題6:數(shù)組循環(huán)右移問題

一個數(shù)組A中存有N(>0)個整數(shù),在不允許使用另外數(shù)組的前提下,將每個整數(shù)循環(huán)向右移M(≥0)個位置,即將A中的數(shù)據(jù)由(A0A1⋯*AN−1)變換為(ANMAN−1A0A1⋯ANM−1)(最后M個數(shù)循環(huán)移至最前面的M*個位置)。如果需要考慮程序移動數(shù)據(jù)的次數(shù)盡量少,要如何設(shè)計(jì)移動的方法?

輸入格式:

每個輸入包含一個測試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個整數(shù),之間用空格分隔。

輸出格式:

在一行中輸出循環(huán)右移M位以后的整數(shù)序列,之間用空格分隔,序列結(jié)尾不能有多余空格。

輸入樣例:

6 2 1 2 3 4 5 6

結(jié)尾無空行

輸出樣例:

5 6 1 2 3 4

結(jié)尾無空行

算法描述:1.定義數(shù)組并存入元素,輸入要移動的值;

2.注意先處理一下移動的值,讓他和數(shù)組中元素的總個數(shù)取個余;

3.優(yōu)先考慮特殊情況:如果移動的值為0,那直接打印;

4.移動k個,先把最后k個值放到前面,做特殊處理,方便剩余的元素打?。?/p>

5.然后再注意格式問題,打印出除最后一個以外的數(shù)字+空格,最后在打印 最后一個數(shù)。

代碼實(shí)現(xiàn):

#include <stdio.h>
int main()
{
    int n,move;
    scanf("%d %d",&n,&move);
    int arr[n],i;
    for(i = 0;i < n;i++)
    {
        scanf("%d",&arr[i]);
    }
    
    move %= n;              //取余算出到底移動多少,進(jìn)行簡化
    
    if(move == 0)               //特殊情況特殊處理
    {
        for(i = 0;i < n - 1;i++)
        {
            printf("%d",arr[i]);        //注意格式問題
        }
        printf("%d",arr[n-1]);
        
        return 0;
    }
    
    for(i = n - move;i < n;i++)     //移動move,把最后move個數(shù)放前面
    {
        printf("%d ",arr[i]);
    }
    for(i = 0;i < n - move - 1;i++) //把剩下除了最后一個數(shù),打印出來
    {
        printf("%d ",arr[i]);
    }
    printf("%d",arr[n-1-move]);         //最后一個沒空格
    
    return 0;
}

運(yùn)行結(jié)果:

總結(jié)

到此這篇關(guān)于關(guān)于C語言一維數(shù)組算法問題的文章就介紹到這了,更多相關(guān)C語言一維數(shù)組算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言二維數(shù)組應(yīng)用之掃雷游戲

    C語言二維數(shù)組應(yīng)用之掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言二維數(shù)組應(yīng)用之掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • opencv利用霍夫變換檢測直線進(jìn)行圖片校正

    opencv利用霍夫變換檢測直線進(jìn)行圖片校正

    這篇文章主要為大家詳細(xì)介紹了opencv利用霍夫變換檢測直線對圖片進(jìn)行校正,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • QT中進(jìn)程的創(chuàng)建實(shí)現(xiàn)

    QT中進(jìn)程的創(chuàng)建實(shí)現(xiàn)

    本文主要介紹了QT中進(jìn)程的創(chuàng)建實(shí)現(xiàn),詳細(xì)介紹了創(chuàng)建進(jìn)程的整個過程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • 詳解C++中stoi/stol/stoll函數(shù)的用法

    詳解C++中stoi/stol/stoll函數(shù)的用法

    這篇文章主要為大家詳細(xì)介紹了C++中stoi、stol、stoll函數(shù)的具體用法,文中的示例代碼講解詳細(xì),對我們學(xué)校C++有一點(diǎn)的幫助,需要的可以參考一下
    2023-03-03
  • C語言 坐標(biāo)移動詳解及實(shí)例代碼

    C語言 坐標(biāo)移動詳解及實(shí)例代碼

    這篇文章主要介紹了C語言 坐標(biāo)移動詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C++中的拷貝構(gòu)造詳解

    C++中的拷貝構(gòu)造詳解

    這篇文章主要為大家介紹了C++中的拷貝構(gòu)造,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C指針原理教程之垃圾回收-內(nèi)存泄露

    C指針原理教程之垃圾回收-內(nèi)存泄露

    C語言沒有運(yùn)行時庫,無法自動壓縮使用中的內(nèi)存,縮小堆棧所需內(nèi)存空間。若只申請內(nèi)存,沒有釋放,勢必造成系統(tǒng)內(nèi)存不斷減少、丟失。長時間的運(yùn)行,最終導(dǎo)致系統(tǒng)死機(jī)。文章闡述了C語言垃圾產(chǎn)生的原因,并從引用計(jì)數(shù)、標(biāo)記一清除算法兩方面提出如何實(shí)現(xiàn)C語言的垃圾回收。
    2019-02-02
  • CISBitmap派生的VC++位圖透明類實(shí)例

    CISBitmap派生的VC++位圖透明類實(shí)例

    這篇文章主要介紹了CISBitmap派生的VC++位圖透明類,比較實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • SublimeText編譯C開發(fā)環(huán)境設(shè)置

    SublimeText編譯C開發(fā)環(huán)境設(shè)置

    這篇文章主要介紹了使用SublimeText編譯C代碼的開發(fā)環(huán)境設(shè)置,大家參考使用
    2013-11-11
  • C++11?condition_variable條件變量的用法說明

    C++11?condition_variable條件變量的用法說明

    這篇文章主要介紹了C++11?condition_variable條件變量的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論