數組元素移動
【問題描述】調整輸入數組A[0..n],将其分為兩部分,左邊所有元素為奇數,右邊所有元素為偶數
【輸入形式】a0,b1,b2,a1,a2,b3,a3,a4
【輸出形式】a0,a1,a2,a3,a4,b1,b2,b3
【樣例輸入】1,2,33,8,5
【樣例輸出】1,33,5,2,8
代碼:
#include<stdio.h>
int main()
{
int a[100];
int n=100,i,j,count=1,m;
for(i=0;i<n;i++) //循環輸入數組資料
{
scanf("%d",&a[i]);
char c=getchar();//getchar函數,從鍵盤的緩沖區中得到一個字元常量并指派給c
if(c=='\n') //當鍵盤輸入回車時結束輸入輸入
{
break;
}
count++;
}
scanf("%d",&m);
for(i=0;i<=count;i++)
{
for(j=i+1;j<=count;j++)
{
if(m==(a[i]+a[j]))
{
printf("%d %d",a[i],a[j]);
i=count+1; break;
}
}
}
printf("\n");
return 0;
}
排序問題
【問題描述】
輸入一個已經按升序排序過的數組和一個數字,在數組中查找兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數字的和等于輸入的數字,輸出任意一對即可。
【輸入形式】
一個升序排序的數組以空格隔開,以及一個目标數字,換行輸入
【輸出形式】
如果存在數組中兩個數字和為目标數字,則輸出數字對;
如果存在多個滿足條件的數字對,輸入一對即可;
不存在則不輸出;
【樣例輸入】
1 2 4 7 11 15
15
【樣例輸出】
4 11
【樣例說明】
4+11=15
【評分标準】
時間複雜度必須為 O(n),否則酌情給分。
#include<stdio.h>
int main()
{
int a[100],b[100],c[100];
int i,count=0,j=0,k=0;
char s;
for(i=0;i<100;i++)
{
scanf("%d",&a[i]);
char c=getchar();
if(c=='\n')
break;
scanf("%c",&s);
count++;
}
for(i=0;i<=count;i++)
{
if(a[i]%2==1||a[i]%2==-1)
{
b[j]=a[i];
j++;
}
if(a[i]%2==0)
{
c[k]=a[i];
k++;
}
}
printf("%d",b[0]);
for(i=0;i<j;i++)
printf(",%d",b[i]);
for(i=0;i<k;i++)
printf(",%d",c[i]);
printf("\n");
return 0;
}
猴子選大王問題
N隻猴子選大王,選舉方法如下:所有猴子按1,2,3,… ,N編号圍坐一圈,從第1個猴子開始報數,報到M号退出圈外,如此循環報數,直到圈内隻剩下一個猴子,即為大王。程式設計輸出大王的原始序号。N和M的值由鍵盤輸入。如果你想成為剩下的那一個,在N一定的情況下,你應該站在什麼位置上?程式設計實作位置的求解。
輸入兩個數字N和M,N為猴子的個數,M為報到後退出圈外的數字。
顯示最後剩下的猴子的原始序号。
5 3
4
共5個猴子圍成一圈,報到3号退出圈外,最後留下的猴子的原始編号為4
當輸入的M,N不合法時應當給出錯誤提示“請輸入合法的M,N值!”。
#include<stdio.h>
int main()
{
int n,m;
int last = 0;
scanf("%d %d",&m,&n);
if(n<1 || m<1 )
{
printf("請輸入合法的M,N值!\n");
}else{
for (int i=2;i<=m;i++)
{
last = (last+n)%i;
}
printf("%d\n",last+1);
}
return 0;
}