陣列中有n個數據,要將他們順序迴圈向後移k位,即前面的元素向後移k位
方法一:
#include <stdio.h>
#include <stdlib.h>int main()
{
int k,i,n,a[100]={0},b[100]={0};
scanf("%d %d",&n,&k);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
b[(k+i)%n]=a[i];
for(i=0;i<n;i++)
printf("%d ",b[i]);
}
/////////////////////////////////////
方法二:
#include <stdio.h>#include <stdlib.h>
int main()
{
int a[100],b[100],i,j,n,k,temp;
scanf("%d %d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<k;i++){
temp=a[n-1];
for(j=n-1;j>0;j--)
a[j]=a[j-1];
a[0]=temp;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
////////////////////////////////////////////
方法三
#include <stdio.h>#include <stdlib.h>;
int ff(int a,int b)
{
int i,t=1;
for(i=2;i<=a&&i<=b;i++)
if(a%i==0&&b%i==0)
{
t=t*i;
a=a/i;
b=b/i;
}
return t;//t為所求的最大公約數
}
int main(){
int a[100],b0,b1,i,j,n,k,m,tt;
printf("input the number of data:");
scanf("%d",&n);
printf("input the distant of moving:");
scanf("%d",&k);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
m=ff(n,k);
for(j=0;j<m;j++)
{
b0=a[j];
tt=j;
for(i=0;i<n/m;i++)
{
tt=(tt+k)%n;
b1=a[tt];
a[tt]=b0;
b0=b1;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
相關推薦
陣列中有n個數據,要將他們順序迴圈向後移k位,即前面的元素向後移k位
方法一:#include <stdio.h>#include <stdlib.h>int main(){int k,i,n,a[100]={0},b[100]={0};scanf("%d %d",&n,&k);for(i=0;i<
從陣列中取n個數有多少種組合
private void mergeSort() { // int[] aa = {3, 5, 7, 9, 8, 4, 6, 1, 2}; // merge(aa, 0, aa.length-1); // for (int i=0;i<aa.
陣列中有三個數只出現一次,其它的數恰好出現兩次,找出這三個數。
具體的題意如題 當我第一次碰到這類題的時候是宿舍的舍友分享的,當時他說的問題還要簡單一些,具體的題意是"陣列中只有一個數只出現一次,其它的數恰好出現兩次,找出這個數。" 當時我的第一感覺就是要用到快排,因此得出第一種演算法,將陣列進行快排的第一層排序,然後從中間分開,數字
遞迴:從陣列中取n個數有多少種組合。
還是在學習遞迴。 看別人的部落格自己學習了之後,來寫一下自己的理解吧。 首先這道題目是說,有一個數組,例如arr={1,2,3,4,5,6},給定一個n<=arr_len,例如給定4,問:從陣列中取4個數一共有多少種組合方式? 這個在數學上是排列組合
陣列中任意n個數的全排列(DFS)以及任意n個數的組合
今天做了poj1270這道題,採用了深度優先搜尋,確實啟發了我,無意中想了一個這麼一個問題:求陣列中任意n個數的全排列是不是也可以用深度優先去搜索(我理解這是一種深度搜索,不知道對不對)。 程式碼如下: #include<iostream> #i
Java中將byte陣列中的4個數據轉成int
public static int getIntFromBytes(byte high_h, byte high_l, byte low_h, byte low_l) { return
有n個整數,使前面各數順序向後移m個位置,最後m個數變成前面m個數。寫一函式:實現以上功能,在主函式中輸入n個數和輸出調整後的n個數。
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scann
給定一個正整數n,求出0到n中有幾個數滿足其二進位制表示不包含連續的1
樣例: 輸入:5 輸出:5 0 01 10 100 101滿足,11不滿足。 那麼6144呢? 答案是610,怎麼去計算呢? 思路:查詢從0到n中有多少個數包含連續的1,然後在總數中去掉這些情況,得到
建立一個數組,陣列中有三個物件
json.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>建立一個json格式陣列,
ACMNO.41C語言-數字調序 有n個整數,使前面各數順序向後移m個位置,最後m個數變成前面m個數,見圖。寫一函式:實現以上功能,在主函式中輸入n個數和輸出調整後的n個數
題目描述 有n個整數,使前面各數順序向後移m個位置,最後m個數變成前面m個數,見圖。 寫一函式:實現以上功能,在主函式中輸入n個數和輸出調整後的n個數。 輸入 輸入資料的個數n n個整數 移動的位置m 輸出 移動後的n個數 樣例輸入 10 1 2 3 4
彙編基礎練習題14: 編寫排序子程式,把資料區中的N個數進行排序(資料區中可能有多個類似13題中a1的變數:a2,a3。。。那麼該子程式應該有幾個入口引數?),然後在主程式中驗證。
彙編基礎練習題14: 編寫排序子程式,把資料區中的N個數進行排序(資料區中可能有多個類似13題中a1的變數:a2,a3。。。那麼該子程式應該有幾個入口引數?),然後在主程式中驗證。 編譯工具:Masm for Windows 整合實驗環境2012.5 (附帶一個工具下載地址https
上千萬或上億資料(有重複),統計其中出現次數最多的N個數據. C++實現
上千萬或上億的資料,現在的機器的記憶體應該能存下。所以考慮採用hash_map/搜尋二叉樹/紅黑樹等來進行統計次數。然後就是取出前N個出現次數最多的資料了,可以用第2題提到的堆機制完成。 #in
N個數組,從每個陣列中取出一個數,組成一個序列,輸出所有可能的情況
這個問題是在xx公司的筆試題上遇到的,當時沒有做出來,下來的時候研究了一下這個題。發現這個問題需要用遞迴的方法去求解這個問題。 程式碼如下: import java.util.ArrayList; import java.util.List; public class So
給定一個數組,陣列中有正有負,求出連續陣列中和值最大的數(陣列長度大於等於1)
刷牛牛客遇到的題,想給出完整而又簡潔的function(python解答,但是關鍵是思想,語言不是問題啦)1.給定一個數組,陣列中有正有負,求出連續(全部都是正的時候,所有值累加就是最大值)(全部為負的時候,max(array)就是我們想要的)# -*- coding:utf
給定一個數組,陣列中有正負數,求出所有字陣列中和值最大的值。
/**當我們加上一個正數時,和會增加;當我們加上一個負數時,和會減少。如果當前得到的和是個負數,那麼這個和在接下來的累加中應該拋棄並重新清零, 不然的話這個負數將會減少接下來的和 */ public static int maxSum(int[] a) { int
陣列分割:陣列中大於某個數的元素被分為一類,小於等於某個數的元素被分為另一類
#include<stdio.h> #define MAX 100000 int A[MAX],n; int partition(int p,int r){ int x,i,j,t; x= A[r]; i = p-1; for(j=p;j<r;j++){ if(A[
C:numberNMax 陣列中第n大數的下標,方法比較笨,應用二級指標
//求陣列中第n大數的下標 int * numberNMax(int * array, int size, int n) { if (NULL==array) { printf("Pointer is NULL\n"); exit(EXIT_FAILURE);
【資料結構】【面試題】找N個數據中最大的K個數據
如果不限定條件的話,這個問題還是很好解決的,但是當我們要求時間複雜度為O(N),空間複雜度為O(1)時,問題就沒那麼好解決了。 簡單的思路就是,建立一個大小為K=100的小堆,調整好,然後
JS 陣列中有 undefined 值,用 for 迴圈和 for…in 迴圈遍歷的不同之處
先說結論:在陣列遍歷時一般最好使用for迴圈遍歷 var arr=new Array(); arr[0]="P90"; arr[3]="AWM"; arr[5]="AK47"; console.log("//for 迴圈遍歷"); for(let i=0;i<arr
陣列中有兩個出現一次的數字,其他數字都出現兩次,找出這兩個數字
public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { int length=array.length; if(length==2){