1、題目描述 將一個長度爲10的整型數組中的值按逆序重新存放。 如:原來的順序爲1,2,3,4,5,6,7,8,9,0,要求改爲0,9,8,7,6,5,4,3,2,1。
2、方法1
思路:直接倒序輸出
#include <stdio.h>
int main(){
int a[10];
// printf("請輸入a[j]的值:");
for(int j=0;j<=9;j++){
scanf("%d",&a[j]);
}
for (int j=9;j>=0;j--){
printf("%d\n",a[j]);
}
return 0;
}
3、方法2
思路:構造兩個數組,一個用於存儲輸入的值,一個用於存儲輸出的值。
#include <stdio.h>
int main(){
int a[10];
int b[10];
int i;
// printf("請輸入a[j]的值:");
for(int j=0;j<=9;j++){
scanf("%d",&a[j]);
}
for (int j=9;j>=0;j--){
for(i=0;i<=9;i++){
b[i]=a[j];
printf("%d\n",b[i]);
break;
}
}
return 0;
}
4、方法3
思路:通過把第一個數字和最後一個交換位置輸出,第二個數字和倒數第二個數字交換位置輸出。第三個…直到交換爲所有數字。
#include <stdio.h>
int main(){
int a[10];
int j;
int n=0;
int i=9;
int e;
printf("請輸入a[j]的值:");
for(j=0;j<=9;j++){
scanf("%d",&a[j]);
}
while(n<=4){
while(i>=(9-n)){
int temp=a[n];
a[n]=a[i];
a[i]=temp;
i--;
}
n++;
}
for(e=0;e<=9;e++){
printf("%d\n",a[e]);
}
return 0;
}
注意:此種方法非常容易出錯,我嘗試了好幾種方法,如果把中間的while循環改成for循環,改動如下,結果一直出錯,我實在不知道錯哪了,如果有讀者發現其中的錯誤,望不吝賜教。另外其中的循環爲什麼是(i>=(9-n))而不是(i>=5)或者(i>=0),因爲在for循環的嵌套中,一般是外循環執行一次,內循環全部執行外才會跳出到外循環,爲了保證內循環執行一次就跳轉到外循環,所以我們必須寫成(i>=(9-n))。
for (n=0;n<=4;n++){
for(i=9;i>=(9-n);i--){
int temp=a[n];
a[n]=a[i];
a[i]=temp;
}## 標題
}
5、方法4
思路:因爲棧有"後進先出”的特點,所以可以利用棧的方法求解。但是這個部分我一直出錯,可能是數據結構沒有學好,順便附上別人的代碼,我運行不出結果,此代碼僅供參考,主要是提供給大家一個思路。
#include <iostream>
#include "stack.cpp" //這裏引用的是我們自己先前寫的棧的定義文件stack.cpp;
using namespace std;
main()
{
int n;
double item;
stack<double>numbers;
cout<<"Type in am integer n follow by n decimal numbers."<<endl
<<"The numbers will be printed in reverse order."<<endl;
cin>>n;
for(int i = 0; i < n; i++)
{
cout<<"Please input your "<<i+1<<" number"<<endl;
cin>>item;
numbers.push(item);
}
cout<<endl<<endl;
while(!numbers.empty())
{
numbers.top(item);
cout<<item<<" ";
numbers.pop();
}
cout<<endl;
}
6、實驗結果