第二次上機題目
- 第一題
- 第二題
- 第三題
- 第四題
- 總結
第一題
1.題目描述

2.解決思路
交換兩個陣列的數字其實和交換兩個物件的數字原理是一樣的,都采用了一個中間變數作為橋梁,其余的作業無非是找出最大的那一行,
3.代碼詳情
#include<iostream>
using namespace std;
int main() {
int arr[3][5];
int i, j;
cout << "輸入一個三行五列的矩陣" << endl;
for (i = 0; i < 3; i++) {
for (j = 0; j < 5; j++) {
cin >> arr[i][j];
}
}//輸入一個三行五列的矩陣
int a=0, b=0, c=0;
for (j = 0; j < 5; j++) {
a += arr[0][j];
}
for (j = 0; j < 5; j++) {
b += arr[1][j];
}
for (j = 0; j < 5; j++) {
c += arr[2][j];
}//計算每行元素之和
if (b > a && b > c) {
int arr2[5];//arr2陣列用于交換的媒介
for (j = 0; j < 5; j++) {
arr2[j] = arr[0][j];
arr[0][j] = arr[1][j];
arr[1][j] = arr2[j];
}
}
if (c > b && c > a) {
int arr2[5];//arr2陣列用于交換的媒介
for (j = 0; j < 5; j++) {
arr2[j] = arr[0][j];
arr[0][j] = arr[2][j];
arr[2][j] = arr2[j];
}
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 5; j++) {
cout << arr[i][j];
}
cout << "\n";
}
return 0;
}
第二題
1.題目描述
2.解決思路
首先創建一個二維陣列然后利用下標訪問特定的元素并進行運算,最后根據題目要求輸出運算結果即可
3.代碼詳情
#include<iostream>
using namespace std;
int main() {
int a2d[3][3];
cout << "輸入一個3*3方陣" << endl;
int i, j;
for (i = 0; i < 3 ; i++) {
for (j = 0; j < 3; j++) {
cin >> a2d[i][j];
}
}
int (*p2d)[3] = a2d;
int a = 0, b = 0, c = 0;
for (int m = 0; m < 3; m++) {
for (int k = 0; k <= m; k++) {
a += *(*(p2d + m) + k);
}
}
cout << "下三角形和為:" << a << endl;
for (int m = 0; m < 3; m++) {
for (int k = 2; k >= m; k--) {
b += *(*(p2d + m) + k);
}
}
cout << "上三角形和為:" << b << endl;
for (int i = 0; i < 3; i++) {
c += *(*(p2d + i) + i);
}
cout << "主對角線和為:" << c << endl;
return 0;
}
第三題
1.題目詳情


2.解決思路
這是困擾我最久的一個問題,最開始沒看懂題目要求用了char來獲取字符,后來才明白要用string,我本來以為只需要進行少量的修改即可,但后來發現和char不同的是:當我令空格(ASCII碼為32)為0的時候,它并不會被洗掉,而用char就不會出現這個問題,我的解決方法是定義一個空的string型別物件carray2,當檢測到carray里的某個字符是字母的時候,我就把它變成小寫存放到carray2里,非字母字符則不動,這樣,carray2里的字符就是洗掉非字母字符以及把字母全部變成小寫之后的句子了,最后用題給思路判斷是否為回文,
3.代碼詳情
#include<iostream>
#include<string>
using namespace std;
int main() {
string carray, carray2;
int is_palindrome = 1;
cout << "Please input a string.." << endl;
getline(cin, carray);
int len = carray.length();
for (int i = 0; i < len; i++) {
if (carray[i] > 64 && carray[i] < 123) {
if (carray[i] > 64 && carray[i] < 91) { carray[i] += 32; carray2 += carray[i]; continue; }
if (carray[i] > 96 && carray[i] < 123) { carray2 += carray[i]; }
}
}
int len2 = carray2.length();
for (int i = 0; i < len2 / 2; i++){
if (carray2[i] != carray2[len2 - 1 - i]) {
is_palindrome = 0;
break;
}
}
if (is_palindrome)
cout << "The string is a palindrome." << endl;
else
cout << "The string is not a palindrome." << endl;
return 0;
}
第四題
1.題目詳情

2.解決思路
這題思路是按照題給提示來的,只不過不同的是,當報數來到最后一個人的時候,我直接讓下標變成0來回到第一個人而不是用提示的方法,
3.代碼詳情
#include<iostream>
#include<vector>
#include<cstdlib>
using namespace std;
int main() {
int n, k = 0, p = 0;
cout << "輸入人數n:" << endl;
cin >> n;
srand(time(0));
int m = rand() % 100;
cout << "生成的亂數為" << m << endl;
vector<bool>vi(n,1);
for (int i = 0;; i++) {//i為下標
if (i == n) {
i = 0;
}
if (vi[i] != 0) {
k++;//k表示編號為i+1的人所報的數字
}
if (k == m) {
vi[i] = 0;
for (int j = 0; j < n; j++) {
if (vi[j] == 1) {
p++;//p用來計vector里面1的個數
}
}
if (p == 1) {
cout << "最后剩下的人的編號為" << i + 1 << endl;
break;
}
p = 0;
k = 0;
}
if (p == 1) { break; }
}
return 0;
}
總結
這次上機遇到了不少困難,求助過同學,上過百度、CSDN……總之想盡各種辦法來克服困難,這次作業我學到了不少額外知識,比如了解了什么是偽隨機、補充了許多vector的函式、加強了string型別的用法、了解了string和char的區別,識訓頗豐,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233058.html
標籤:其他
下一篇:Unity中的小技巧
