《演算法筆記》2.5小節
有點撈啊...題簡單的話更應該寫的優雅一點才對...QAQ
我這麼懶得動腦 真的會有進步嗎...檢討一下...
問題 A: 習題6-4 有序插入
題目描述
有一個已排好序的陣列,要求輸入一個數後,按原來排序的規律將它插入到陣列中。
假設陣列長度為10,陣列中前9個數(這9個數要求從鍵盤上輸入,輸入時要滿足自小到大的輸入順序)已經按從小到大進行排序。
然後再從鍵盤上輸入一個整數,將此整數插入到前有序的9個數中,使得最終的10個數依然是從小到大有序的。
輸入
第一行輸入以空格分隔的9個整數數,要求按從小到大的順序輸入。
第二行輸入一個整數
輸出
從小到大輸出這10個數,每個數一行。
樣例輸入
1 11 21 31 41 51 61 71 81
45
樣例輸出
1
11
21
31
41
45
51
61
71
81
提示
定義陣列時,把陣列長度定義為10.
#include<iostream> using namespace std; int main(){ int a[10]={0}; for(int i=0;i<=9;i++) cin>>a[i]; for(int k=0;k<=8;k++) { int temp; if(a[9]<a[k]) { temp=a[9]; a[9]=a[k]; a[k]=temp; } } for(int j=0;j<=9;j++) cout<<a[j]<<endl; return 0; }
emm 效率有點低...哈哈
問題 B: 習題6-5 陣列元素逆置
題目描述
將一個長度為10的整型陣列中的值按逆序重新存放。
如:原來的順序為1,2,3,4,5,6,7,8,9,0,要求改為0,9,8,7,6,5,4,3,2,1
輸入
從鍵盤上輸入以空格分隔的10個整數。
輸出
按相反的順序輸出這10個數,每個數佔一行。
樣例輸入
1 2 3 4 5 6 7 8 9 0
樣例輸出
0
9
8
7
6
5
4
3
2
1
#include<iostream> using namespace std; int main(){ int a[10]={0}; for(int i=0;i<=9;i++) cin>>a[i]; for(int j=9;j>=0;j--) cout<<a[j]<<endl; return 0; }
問題 C: 習題6-6 楊輝三角
題目描述
按要求輸入如下格式的楊輝三角
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
最多輸出10層
輸入
輸入只包含一個正整數n,表示將要輸出的楊輝三角的層數。
輸出
對應於該輸入,請輸出相應層數的楊輝三角,每一層的整數之間用一個空格隔開
樣例輸入
5
樣例輸出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
#include<iostream>
using namespace std;
int main(){
int a[10][10]={0};
int n;
cin>>n;
for(int i=0;i<n;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
if(a[i][j]!=1)
a[i][j]=a[i-1][j-1]+a[i-1][j];
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
問題 D: 習題6-12 解密
題目描述
有一行電文,已按如下規律譯成密碼:
A-->Z a-->z
B-->Y b-->y
C-->X c-->x
...... ......
即第一個字母變成第26個字母,第i個字母變成第(26-i+1)個字母,非字母字元不變。要求根據密碼譯回原文,並輸出。
輸入
輸入一行密文
輸出
解密後的原文,單獨佔一行。
樣例輸入
ZYX123zyx
樣例輸出
ABC123abc
#include <iostream>
using namespace std;
main ()
{
char a[100];
cin>>a;
for(int i=0;i<100;i++)
{
if(a[i]>='A'&&a[i]<='Z')
a[i]='A'+'Z'-a[i];
if(a[i]>='a'&&a[i]<='z')
a[i]='a'+'z'-a[i];
if(a[i]=='\0')
break;
}
cout<<a<<endl;
return 0;
}
問題 E: 習題6-13 字串比較
題目描述
比較兩個字串s1和s2的大小,如果s1>s2,則輸出一個正數;若s1=s2,則輸出0;若s1<s2,則輸出一個負數。
要求:不用strcpy函式;兩個字串用gets函式讀入。
例如:"A"與"C"相比,由於"A"<"C",應輸出負數,同時由於"A"與"C"的ASCII碼差值為2,因此應輸出"-2"。
同理:"And"和"Aid"比較,根據第2個字元比較的結果,"n"比"i"大5,因此應該輸出"5"
輸入
輸入2行字串
輸出
一個整數,表示這兩個字串 比較的差值,單獨佔一行。
樣例輸入
And Aid
樣例輸出
5
#include <iostream>
#include<cstdio>
using namespace std;
main ()
{
char s1[100],s2[100];
int i,n=0;
gets(s1);
gets(s2);
for(i=0;s1[i]!='\0'&&s2[i]!='\0';i++)
if(s1[i]!=s2[i])
{
n=s1[i]-s2[i];
break;
}
cout<<n<<endl;
return 0;
}
問題 F: 例題6-1 逆序輸出陣列元素
題目描述
從鍵盤上輸入10個整數,儲存在一個長度為10的整型陣列中,要求將輸入的10個數逆序輸出。
如輸入為:0,1,2,3,4,5,6,7,8,9 輸出為9,8,7,6,5,4,3,2,1,0
輸入
10個整數,以空格分隔
輸出
將輸入的10個整數逆序輸出,每個數佔一行。
樣例輸入
0 1 2 3 4 5 6 7 8 9
樣例輸出
9 8 7 6 5 4 3 2 1 0
emmm 這個按照系統的意思應該和B是同一題....為毛我讀下來覺得是排個序然後倒序輸出???
問題 G: 例題6-2 陣列求解Fibonacci數列問題
題目描述
Fibonacci數列的特點:第1,2個數為1,1。從第3個數開始,概述是前面兩個數之和。即:
要求輸出Fibonacci數列的前20個數。
輸入
無
輸出
Fibonacci數列的前20個數,每個數佔一行。
樣例輸入
無
樣例輸出
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
#include<iostream>
using namespace std;
int main(){
int a[20]={1,1};
for(int i=2;i<20;i++)
a[i]=a[i-1]+a[i-2];
for(int j=0;j<20;j++)
cout<<a[j]<<endl;
return 0;
}
問題 H: 例題6-3 氣泡排序
題目描述
從鍵盤上輸入10個整數,用冒泡法對這10個數進行排序(由小到大)。
輸入
以空格分隔的10個整數
輸出
依次輸出排好序的10個整數,每個數佔一行。
樣例輸入
1 3 5 7 9 2 4 6 8 0
樣例輸出
0 1 2 3 4 5 6 7 8 9
#include<iostream>
using namespace std;
int main(){
int a[10];
for(int i=0;i<10;i++)
cin>>a[i];
for(int k=9;k>0;k--)
for(int r=0;r<k;r++)
{
if(a[r]>a[r+1])
{
int temp;
temp=a[r];
a[r]=a[r+1];
a[r+1]=temp;
}
}
for(int j=0;j<10;j++)
cout<<a[j]<<endl;
return 0;
}
問題 I: 例題6-4 矩陣轉置
題目描述
將一個2行3列的矩陣(二維陣列)行列互換,儲存到另一個3行2列的矩陣中。
要求以整型資料為例來解答。
輸入
輸入2行資料,每行3個整數,以空格分隔。
輸出
行列互換後的矩陣,3行,每行2個數據,以空格分隔。
樣例輸入
1 2 3 4 5 6
樣例輸出
1 4 2 5 3 6
#include<iostream>
using namespace std;
int main()
{
int a[2][3];
int b[3][2];
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
{
cin>>a[i][j];
b[j][i]=a[i][j];
}
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}
問題 J: 例題6-9 字串求最大值
題目描述
從鍵盤上輸入3個字串,求出其中最大者。
輸入
輸入3行,每行均為一個字串。
輸出
一行,輸入三個字串中最大者。
樣例輸入
England China America
樣例輸出
England
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[100],b[100],c[100],max[100];
cin>>a>>b>>c;
if(strcmp(b,c)>0)
strcpy(max,b);
else
strcpy(max,c);
if(strcmp(a,max)>0)
strcpy(max,a);
cout<<max<<endl;
}