第十一周编程作业
| 這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3201 |
| 我在該課程的目標是 | 熟悉經典數論 |
| 這個作業在那個具體方面幫助我實現目標 | 遞歸函數及數論 |
| 參考文獻 | C語言程序設計(第3版) |
7-1 漢諾塔問題* (10 分)
漢諾塔是一個源于印度古老傳說的益智玩具。據說大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤,大梵天命令僧侶把圓盤移到另一根柱子上,并且規定:在小圓盤上不能放大圓盤,每次只能移動一個圓盤。當所有圓盤都移到另一根柱子上時,世界就會毀滅。
請編寫程序,輸入漢諾塔圓片的數量,輸出移動漢諾塔的步驟。
輸入格式
圓盤數 起始柱 目的柱 過度柱輸出格式
移動漢諾塔的步驟 每行顯示一步操作,具體格式為: 盤片號: 起始柱 -> 目的柱 其中盤片號從 1 開始由小到大順序編號。輸入樣例
3 a c b輸出樣例
1: a -> c 2: a -> b 1: c -> b 3: a -> c 1: b -> a 2: b -> c 1: a -> c實驗代碼
#include<stdio.h> void hano(int n,char x,char y,char z); int main () {int n;char x,y,z;scanf("%d\n",&n);scanf("%c %c %c ",&x,&y,&z);hano(n,x,y,z); } void hano(int n,char x,char y,char z) {if(n==1){printf("%d: %c -> %c\n",n,x,y);}else{hano(n-1,x,z,y);printf("%d: %c -> %c\n",n,x,y);hano(n-1,z,y,x);} }設計思路
運行截圖
7-2 估值一億的AI核心代碼 (20 分)
以上圖片來自新浪微博。
本題要求你實現一個稍微更值錢一點的 AI 英文問答程序,規則是:
無論用戶說什么,首先把對方說的話在一行中原樣打印出來;
消除原文中多余空格:把相鄰單詞間的多個空格換成 1 個空格,把行首尾的空格全部刪掉,把標點符號前面的空格刪掉;
把原文中所有大寫英文字母變成小寫,除了 I;
把原文中所有獨立的 can you、could you 對應地換成 I can、I could—— 這里“獨立”是指被空格或標點符號分隔開的單詞;
把原文中所有獨立的 I 和 me 換成 you;
把原文中所有的問號 ? 換成驚嘆號 !;
在一行中輸出替換后的句子作為 AI 的回答。
輸入格式:
輸入首先在第一行給出不超過 10 的正整數 N,隨后 N 行,每行給出一句不超過 1000 個字符的、以回車結尾的用戶的對話,對話為非空字符串,僅包括字母、數字、空格、可見的半角標點符號。輸出格式:
按題面要求輸出,每個 AI 的回答前要加上 AI: 和一個空格。輸入樣例:
6 Hello ?Good to chat with you can you speak Chinese? Really? Could you show me 5 What Is this prime? I,don 't know輸出樣例:
Hello ? AI: hello!Good to chat with you AI: good to chat with you can you speak Chinese? AI: I can speak chinese! Really? AI: really! Could you show me 5 AI: I could show you 5 What Is this prime? I,don 't know AI: what Is this prime! you,don't know參考代碼https://blog.csdn.net/qq_41117236/article/details/88947843
7-3 ***八皇后問題 (20 分)
在國際象棋中,皇后是最厲害的棋子,可以橫走、直走,還可以斜走。棋手馬克斯·貝瑟爾 1848 年提出著名的八皇后問題:即在 8 × 8 的棋盤上擺放八個皇后,使其不能互相攻擊 —— 即任意兩個皇后都不能處于同一行、同一列或同一條斜線上。
現在我們把棋盤擴展到 n × n 的棋盤上擺放 n 個皇后,請問該怎么擺?請編寫程序,輸入正整數 n,輸出全部擺法(棋盤格子空白處顯示句點“.”,皇后處顯示字母“Q”,每兩格之間空一格)。
輸入格式
正整數 n (0 < n ≤ 12)輸出格式
若問題有解,則輸出全部擺法(兩種擺法之間空一行),否則輸出 None。要求:試探的順序逐行從左往右的順序進行,請參看輸出樣例2。
輸入樣例1
3輸出樣例1
None輸入樣例2
6輸出樣例2
. Q . . . . . . . Q . . . . . . . Q Q . . . . . . . Q . . . . . . . Q .. . Q . . . . . . . . Q . Q . . . . . . . . Q . Q . . . . . . . . Q . .. . . Q . . Q . . . . . . . . . Q . . Q . . . . . . . . . Q . . Q . . .. . . . Q . . . Q . . . Q . . . . . . . . . . Q . . . Q . . . Q . . . .參考鏈接
https://blog.csdn.net/unhappypeople/article/details/17374937
數組指針
顧名思義數組指針就是指向數組地址的指針
···
include <stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int p = (int)(&a + 1);
}
···
指針數組
數組元素全為指針的數組稱為指針數組
指針函數
指針函數是指帶指針的函數
include <stdio.h>
void fun1(void)
{
printf("Im fun1\n"); } void fun2(void) { printf("Im fun2\n");
}
void fun3(void)
{
printf("Im fun3\n"); } void fun4(void) { printf("Im fun4\n");
}
void fun5(void)
{
printf("I`m fun5\n");
}
void (*s[5])(void) = {fun1,fun2,fun3,fun4,fun5};
int main()
{
int i;
void (isr)(void) = NULL;//定義一個函數指針
for(i=0;i<5;i++)
{
isr = s[i];
(isr)();
}
return 0;
}
include <stdio.h>
int main(int argc, const char * argv[])
{
int a = 5;
int *p1 = &a;
printf("&a = %p\n", &a);
printf("p1 = %p\n", p1);
int **p2 = &p1;
printf("&p1 = %p\n", &p1);
printf("p2 = %p\n", p2);
printf("a = %d\n", a); // = 5;
printf("p1 = %d\n", p1); // = 5;
printf("p2 = %d\n", p2); // = 5;
printf("\n");
return 0;
}
```
學習進度條
| 3.10-3.16 | 6小時 | 120 | 還是不會找最大數組 |
| 3.16-3.22 | 7小時 | 150 | 冒號排序法還是不太會 |
| 3.23-3.29 | 6小時 | 90 | 運用指針不熟練 |
| 3.30-4.05 | 8小時 | 160 | 預習題思路比較混亂 |
| 4.06-4.12 | 8小時 | 190 | 運用指針不夠熟練 |
| 4.13-4.19 | 12小時 | 170 | 定義結構變量不熟系 |
| 4.20-4.26 | 9小時 | 240 | 遞歸函數不太會用 |
| 4.27-5.3 | 3小時 | 0 | |
| 5.04-5.10 | 8小時 | 200 | 遞歸函數不熟練 |
折線圖
轉載于:https://www.cnblogs.com/dahuige666/p/10846500.html
總結
- 上一篇: 高并发之CAS机制和ABA问题
- 下一篇: Java 6.编写类