日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蛮力法求解问题

發布時間:2023/12/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蛮力法求解问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

** 給定一個整數數組 A=(a0,a1,…an-1),若 i<j 且 ai>aj,則<ai,aj>就為一
個逆序對。例如數組(3,1,4,5,2)的逆序對有<3,1>,??,2>,<4,2>,
<5,2>。設計一個算法采用蠻力法求 A 中逆序對的個數即逆序數。設計算法求
解逆序對的個數;**

#include<iostream> using namespace std; int solve(int a[], int n) {int i, j;int count = 0;for (i = 0; i < n - 1; i++){for (j = i + 1; j < n; j++){if (a[i] > a[j]){count++;}}}return count; } int main() {int a[] = { 3,1,4,5,2, };int n = sizeof(a) / sizeof(a[0]);cout << "此數組中的逆序對的個數是:" << solve(a, n) << endl;return 0; }

有一群雞和一群兔,它們的只數相同,它們的腳數都是三位數,且這兩
個三位數的各位數字只能是 0、1、2、3、4、5。設計一個算法用蠻力法求雞和
兔的只數各是多少?它們的腳數各是多少?

#include<iostream> using namespace std; void solve() {int a, b, c, d, e, f;int i, j;for (int a = 1; a < 5; a++) {for (int b = 0; b < 5; b++) {for (int c = 0; c < 5; c++) {for (int d = 1; d < 5; d++) {for (int e = 0; e < 5; e++) {for (int f = 0; f < 5; f++) {i = a * 100 + b * 10 + c;j = d * 100 + e * 10 + f;if (i % 20 && j && 40) {if (i / 2 == j / 4) {cout << "雞有" << i / 2 << "只" << "兔有" << j / 4 << "只" << "雞腳有" << i << "個" << "兔腳有" << j << "個" << endl;}else {continue;}}}}}}}} } int main() {solve();return 0; }

有一個三位數,個位數字比百位數字大,而百位數字又比十位數字大,
并且各位數字之和等于各位數字相乘之積。設計一個算法用窮舉法求此三位數。

#include<iostream> using namespace std; void solve() {int a, b, c;int x;for (a = 1; a <= 8; a++){for (b = 0; b <= 7; b++){for (c = 2; c <= 9; c++){if (a<c && a>b){if (a + b + c != a * b * c){continue;}else{x = 100 * a + 10 * b + c;cout << "三位數是" << x;}}}}} } int main() {solve();return 0; }

某年級的同學集體去公園劃船,如果每只船坐 10 人,那么多出 2 個座
位;如果每只船多坐 2 人,那么可少租 1 只船。設計一個算法用蠻力法求該年級
的最多人數?

#include<iostream> using namespace std; void solve() {int x, y;int z;for (int y = 1; y <= 100; y++){for (z = 0; z <= 11; z++){if (10 * y - 2 == 12 * (y - 1) - z){x = 10 * y - 2;}}}cout << x; } int main() {solve();return 0; }

蠻力法實現背包問題。指定背包的限定重量為 6,物品數量為 4,四個物
品的重量分別為 5,3,2,1;四個物品的價值分別為 4,4,3,1。利用蠻力法輸出所有解
和最佳解

//求解0/1背包問題 #include<iostream> #include <vector>using namespace std; vector<vector<int> > ps; void PSet(int n) {vector<vector<int> > ps1;vector<vector<int> >::iterator it;vector<int> s, s1;ps.push_back(s);for (int i = 1; i <= n; i++){ps1 = ps;for (it = ps1.begin(); it != ps1.end(); ++it)(*it).push_back(i);for (it = ps1.begin(); it != ps1.end(); ++it)ps.push_back(*it);} }void Knap(int w[], int v[], int W){int count = 0; //方案編號int sumw, sumv; //當前方案的總重量和總價值int maxi, maxsumw = 0, maxsumv = 0; //最優方案的編號、總重量和總價值vector<vector<int> >::iterator it; //冪集迭代器vector<int>::iterator sit; //冪集集合元素迭代器printf(" 序號\t選中物品\t總重量\t總價值\t能否裝入\n");for (it = ps.begin(); it != ps.end(); ++it) //掃描ps中每一個集合元素{printf(" %d\t", count + 1);sumw = sumv = 0;printf("{");for (sit = (*it).begin(); sit != (*it).end(); ++sit){printf("%d ", *sit);sumw += w[*sit - 1];sumv += v[*sit - 1];}printf("}\t\t%d\t%d ", sumw, sumv);if (sumw <= W){printf("能\n");if (sumv > maxsumv) //比較求最優方案{maxsumw = sumw;maxsumv = sumv;maxi = count;}}else printf("否\n");count++;}printf("最佳方案為: ");printf("選中物品");printf("{ ");for (sit = ps[maxi].begin(); sit != ps[maxi].end(); ++sit)printf("%d ", *sit);printf("},");printf("總重量:%d,總價值:%d\n", maxsumw, maxsumv);}void main(){int n = 4, W = 6;int w[] = { 5,3,2,1 };int v[] = { 4,4,3,1 };PSet(n);printf("0/1背包的求解方案\n", n);Knap(w, v, W);}

總結

以上是生活随笔為你收集整理的蛮力法求解问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。