關(guān)于C語(yǔ)言一維數(shù)組算法問(wèn)題詳解
問(wèn)題1:將數(shù)組中的數(shù)逆序存放
本題要求編寫(xiě)程序,將給定的n個(gè)整數(shù)存入數(shù)組中,將數(shù)組中的這n個(gè)數(shù)逆序存放, 再按順序輸出數(shù)組中的元素。
算法描述:1.向數(shù)組a中輸入元素;
2.定義一個(gè)新數(shù)組new,將數(shù)組a中的元素倒序存放;
3.將數(shù)組b正序輸出,注意結(jié)尾無(wú)空格的格式問(wèn)題。
代碼實(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; //定義一個(gè)數(shù)組new用來(lái)存入數(shù)組a的逆順序
for(int j = 0;j < n;j++)
{
new[j] = arr[n-1-i]; //倒序存入
}
for(int k = 0;k < n - 1;k++) //數(shù)組中最后一個(gè)元素不一起輸入,保持結(jié)尾無(wú)空格
{
printf("%d ",new[k]);
}
printf("%d",new[n-1]); //輸出最后一個(gè)元素
return 0;
}
運(yùn)行結(jié)果:

問(wèn)題2:求數(shù)組中最大值及其下標(biāo)
本題要求編寫(xiě)程序,找出給定的n個(gè)數(shù)中的最大值及其對(duì)應(yīng)的最小下標(biāo)(下標(biāo)從0開(kāi)始)。 輸入格式: 輸入在第一行中給出一個(gè)正整數(shù)n(1<n≤10)。第二行輸入n個(gè)整數(shù),用空格分開(kāi)。 輸出格式: 在一行中輸出最大值及最大值的最小下標(biāo),中間用一個(gè)空格分開(kāi)。
算法描述:1.向數(shù)組中存放元素;
2.把數(shù)組中第一個(gè)元素先定義一個(gè)變量保存住;
3.遍歷數(shù)組,如果比保存第一個(gè)元素的變量大,那就賦值給那個(gè)變量,直到變量值變?yōu)樽畲螅?/p>
4.定義一個(gè)變量用來(lái)記錄最大值的下標(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]; //定義一個(gè)變量保存數(shù)組第一個(gè)元素
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é)果:

問(wèn)題3:找出不是兩個(gè)數(shù)組的共有元素
本題要求給定兩個(gè)整型數(shù)組,本題要求找出不是兩者共有的元素。
算法描述:1.分別定義兩數(shù)組并輸入值;
2.用數(shù)組a中元素對(duì)比數(shù)組b中元素,非共有值放入c中(此處可以用一個(gè) 標(biāo)志變量flag,標(biāo)志 是否有共有值);
3.用數(shù)組b中元素對(duì)比數(shù)組a中元素,重復(fù)“2”操作;
4.最后先輸出數(shù)組c中第一個(gè)元素,然后判斷元素是否與之前錄入元素
重復(fù)。
5.最后打印出來(lái)數(shù)組c中的元素,也就是非共有值,此處注意格式問(wèn)題。
代碼實(shí)現(xiàn):
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int arr1[n],i; //定義第一個(gè)數(shù)組
for(i = 0;i < n;i++)
{
scanf("%d",&arr1[i]);
}
int m;
scanf("%d",&m);
int arr2[m],j; //定義第二個(gè)數(shù)組
for(j = 0;j < m;j++)
{
scanf("%d",&arr2[j]);
}
int k,rem[20] = {}; //數(shù)組rem是用來(lái)記錄非公有值的
for(i = 0;i < n;i++)
{
int flag = 0; //定義標(biāo)志變量用來(lái)標(biāo)志是否有非共有值
for(j = 0;j < m;j++)
{
if(arr1[i] == arr2[j]) //用數(shù)組1中元素對(duì)比數(shù)組2中元素,非共有值放入數(shù)組rem中
{
flag = 1;
}
}
if(flag == 0)
{
rem[k] = arr1[i];
k++;
}
}
for(i = 0;i < m;i++) //用數(shù)組2中元素對(duì)比數(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中第一個(gè)元素
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)樘崆拜敵龅谝粋€(gè)元素,所以后面要打一個(gè)空格再打元素,
//結(jié)尾無(wú)空格的格式問(wèn)題
}
}
return 0;
}
運(yùn)行結(jié)果:

問(wèn)題4:找出出現(xiàn)次數(shù)最多的數(shù)
本題要求統(tǒng)計(jì)一個(gè)整型序列中出現(xiàn)次數(shù)最多的整數(shù)及其出現(xiàn)次數(shù)。
輸入格式: 輸入在一行中給出序列中整數(shù)個(gè)數(shù)N(0<N≤1000),以及N個(gè)整數(shù)。數(shù)字間以空格分隔。
輸出格式: 在一行中輸出出現(xiàn)次數(shù)最多的整數(shù)及其出現(xiàn)次數(shù),數(shù)字間以空格分隔。題目保證這樣的數(shù)字是唯一的。
算法描述:1.定義兩個(gè)數(shù)組,一個(gè)用來(lái)存放元素,另一個(gè)用來(lái)當(dāng)計(jì)數(shù)器,此數(shù)組注意需 要初始化;
2.在這個(gè)數(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é)果:

問(wèn)題5:數(shù)組中插入數(shù)字并排序
本題要求給出n個(gè)元素的數(shù)組,從小到大排列,再輸入一個(gè)num,插入到數(shù)組中, 使得新數(shù)組依舊是從小到大的順序(用一個(gè)數(shù)組完成)。
算法描述:1.定義一個(gè)數(shù)組并存放元素,單獨(dú)記錄好倒數(shù)第二個(gè)元素;
2.輸入要插入的數(shù)字,注意可以考慮特殊情況,如果插入的數(shù)大于原本倒數(shù) 第二個(gè)數(shù),就可以 直接插入賦值為最后一個(gè)元素;
3.再來(lái)考慮一般情況,遍歷數(shù)組,如果原本的數(shù)大于要插入的數(shù),先保存住 原來(lái)的數(shù)字,然 后把插入的數(shù)放入到原來(lái)的數(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ù)第二個(gè)元素
if(num > end) //考慮特殊情況,如果插入的數(shù)大于倒數(shù)第二個(gè)
{
arr[n] = num; //直接插入賦值
}
else
{
for(i = 0;i < n;i++)
{
if(arr[i] > num) //如果原本的數(shù)大于插入的數(shù)
{
t1 = arr[i]; //先保存原來(lái)的數(shù)
arr[i] = num; //把插入的數(shù)放到原來(lái)數(shù)的位置
for(j = i + 1;j <= n;j++) //處理原來(lái)的數(shù)
{
t2 = arr[j]; //原來(lái)的數(shù)到了后一位保存住
arr[j] = t1; //把原來(lái)的數(shù)賦值給現(xiàn)在要存的這個(gè)位置上
t1 = t2;
}
break;
}
}
}
for(i = 0;i <= n;i++) //注意這里i<=n,因?yàn)槎嗖迦肓艘粋€(gè)數(shù)字
{
printf("%d ",arr[i]);
}
return 0;
}
運(yùn)行結(jié)果:


問(wèn)題6:數(shù)組循環(huán)右移問(wèn)題
一個(gè)數(shù)組A中存有N(>0)個(gè)整數(shù),在不允許使用另外數(shù)組的前提下,將每個(gè)整數(shù)循環(huán)向右移M(≥0)個(gè)位置,即將A中的數(shù)據(jù)由(A0A1⋯*AN−1)變換為(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M個(gè)數(shù)循環(huán)移至最前面的M*個(gè)位置)。如果需要考慮程序移動(dòng)數(shù)據(jù)的次數(shù)盡量少,要如何設(shè)計(jì)移動(dòng)的方法?
輸入格式:
每個(gè)輸入包含一個(gè)測(cè)試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個(gè)整數(shù),之間用空格分隔。
輸出格式:
在一行中輸出循環(huán)右移M位以后的整數(shù)序列,之間用空格分隔,序列結(jié)尾不能有多余空格。
輸入樣例:
6 2 1 2 3 4 5 6
結(jié)尾無(wú)空行
輸出樣例:
5 6 1 2 3 4
結(jié)尾無(wú)空行
算法描述:1.定義數(shù)組并存入元素,輸入要移動(dòng)的值;
2.注意先處理一下移動(dòng)的值,讓他和數(shù)組中元素的總個(gè)數(shù)取個(gè)余;
3.優(yōu)先考慮特殊情況:如果移動(dòng)的值為0,那直接打??;
4.移動(dòng)k個(gè),先把最后k個(gè)值放到前面,做特殊處理,方便剩余的元素打??;
5.然后再注意格式問(wèn)題,打印出除最后一個(gè)以外的數(shù)字+空格,最后在打印 最后一個(gè)數(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; //取余算出到底移動(dòng)多少,進(jìn)行簡(jiǎn)化
if(move == 0) //特殊情況特殊處理
{
for(i = 0;i < n - 1;i++)
{
printf("%d",arr[i]); //注意格式問(wèn)題
}
printf("%d",arr[n-1]);
return 0;
}
for(i = n - move;i < n;i++) //移動(dòng)move,把最后move個(gè)數(shù)放前面
{
printf("%d ",arr[i]);
}
for(i = 0;i < n - move - 1;i++) //把剩下除了最后一個(gè)數(shù),打印出來(lái)
{
printf("%d ",arr[i]);
}
printf("%d",arr[n-1-move]); //最后一個(gè)沒(méi)空格
return 0;
}
運(yùn)行結(jié)果:

總結(jié)
到此這篇關(guān)于關(guān)于C語(yǔ)言一維數(shù)組算法問(wèn)題的文章就介紹到這了,更多相關(guān)C語(yǔ)言一維數(shù)組算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記
- 關(guān)于C語(yǔ)言中的指針與二維數(shù)組
- C語(yǔ)言二維數(shù)組指針的概念及使用
- C語(yǔ)言與java語(yǔ)言中關(guān)于二維數(shù)組的區(qū)別
- 從頭學(xué)習(xí)C語(yǔ)言之二維數(shù)組
- C語(yǔ)言面試C++二維數(shù)組中的查找示例
- C語(yǔ)言二維數(shù)組幾種常用的表示方法
- C語(yǔ)言二維數(shù)組中的查找的實(shí)例
- C語(yǔ)言 指針與二維數(shù)組詳解
- 直觀理解C語(yǔ)言中指向一位數(shù)組與二維數(shù)組的指針
- C語(yǔ)言中的一維數(shù)組與二維數(shù)組的實(shí)現(xiàn)
相關(guān)文章
opencv利用霍夫變換檢測(cè)直線進(jìn)行圖片校正
這篇文章主要為大家詳細(xì)介紹了opencv利用霍夫變換檢測(cè)直線對(duì)圖片進(jìn)行校正,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
QT中進(jìn)程的創(chuàng)建實(shí)現(xiàn)
本文主要介紹了QT中進(jìn)程的創(chuàng)建實(shí)現(xiàn),詳細(xì)介紹了創(chuàng)建進(jìn)程的整個(gè)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2023-08-08
詳解C++中stoi/stol/stoll函數(shù)的用法
這篇文章主要為大家詳細(xì)介紹了C++中stoi、stol、stoll函數(shù)的具體用法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)校C++有一點(diǎn)的幫助,需要的可以參考一下2023-03-03
C語(yǔ)言 坐標(biāo)移動(dòng)詳解及實(shí)例代碼
這篇文章主要介紹了C語(yǔ)言 坐標(biāo)移動(dòng)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01
SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
這篇文章主要介紹了使用SublimeText編譯C代碼的開(kāi)發(fā)環(huán)境設(shè)置,大家參考使用2013-11-11
C++11?condition_variable條件變量的用法說(shuō)明
這篇文章主要介紹了C++11?condition_variable條件變量的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

