1. 程式人生 > >八大演算法思想(一)------------------列舉演算法

八大演算法思想(一)------------------列舉演算法

#include<iostream>

int main()
{
	int j, i[5];		// 迴圈變數,陣列i用來表示4個運算子
	int sign;			// 累加運算時的符號;
	int result;			// 儲存運算式子的結果值
	int count=0;		// 計數器,統計符合條件的方案
	int num[6];			// 儲存運算元
	float left, right;  //儲存中間結果
	char oper[5] = { ' ','+','-','*','/' };   //運算子

	printf("輸入5個數,之間用空格隔開:");
	for (j = 1; j <= 5; j++)
		scanf_s("%d",&num[j]);
	printf("輸入結果:");
	scanf_s("%d",&result);
	//注:這裡i[1]代表的第一個運算子的意思,i[1]=1代表第一個運算子是“+”,i[1]=2代表第一個運算子是“減”,i[1]=3代表第一個運算子是“-”,i[1]=4代表第一個運算子是“/”
	//注:這裡i[2]代表的第二個運算子的意思,i[2]=1代表第二個運算子是“+”,i[2]=2代表第二個運算子是“減”,i[2]=3代表第二個運算子是“-”,i[2]=4代表第二個運算子是“/”
	//i[3],i[4]依次類推。
	for (i[1]=1; i[1]<=4; i[1]++)    //迴圈4種運算子,1表示+,2表示-,3表示*,4表示/
	{
		if ((i[1]<4) || (num[2] != 0))	//運算子若是/,則第二個運算數不能為0,(注:“||”是或運算,兩個條件至少要有一個成立,即第一個運算子為/時,第二個運算數不為0)
		{
			for (i[2]=1; i[2]<=4; i[2]++)
			{
				if ((i[2]<4)||(num[3]!= 0))		//當第二個運算子為/時,第三個運算數不為0
				{
					for (i[3] = 1; i[3] <= 4; i[3]++)
					{
						if ((i[3] < 4) ||( num[4] != 0))	//當第三個運算子為/時,第四個運算數不為0
						{
							for (i[4] = 1; i[4] <= 4; i[4]++)
							{
								if ((i[4] < 4) || (num[5] != 0))	//當第四個運算子為/時,第五個運算數不為0
								{
									left = 0;
									right = num[1];
									sign = 1;
									//使用case語句,將4種運算子填到對應的空格位置,並進行計算
									for (j = 1; j <= 4; j++)
									{
										switch (oper[i[j]])
										{
										case '+':
											left = left + sign*right;
											sign = 1;
											right = num[j + 1];
											break;
										case '-':
											left = left + sign*right;
											sign = -1;
											right = num[j + 1];
											break;
										case '*':
											right = right*num[j + 1];
											break;
										case '/':
											right = right / num[j + 1];
											break;
										}
									}
									//開始判斷,如果運算式子的結果和輸入的結果相同,則表示找到一種演算法,並輸出這個解
									if (left + sign*right == result)
									{
										count++;
										printf("%3d:",count);
										for (j = 1; j <= 4; j++)
											printf("%d%c",num[j],oper[i[j]]);
										printf("%d=%d\n",num[5],result);
									}
								}
							}
						}

					}
				}
			}
		}
	}
	if (count == 0)
		printf("沒有符合要求的方法!\n");
	system("pause");
	return 0;
}


相關推薦

八大演算法思想------------------列舉演算法

#include<iostream> int main() { int j, i[5]; // 迴圈變數,陣列i用來表示4個運算子 int sign; // 累加運算時的符號; int result; // 儲存運算式子的結果值 int count=0; // 計數器,統計符

KF演算法學習演算法原理與推導

       學習過程中接觸到了卡爾曼濾波,因為自己的數學渣屬性,特地把自己的推導過程記錄下來以加深理解,雖然有重複造輪子的嫌疑。。        推導公式過多,圖方便自己用的office寫的文件,後來發現打算上傳到部落格上時很無能為力。。。沒辦法只能截圖上傳圖片了,文章末

資料壓縮演算法學習---RLE演算法

#include<stdio.h> #include<stdlib.h> #include<string.h> FILE *infile,*outfile; /*定義全域性變數*/ void Compress(char *infilename,char *outfil

八大演算法思想------------------遞推演算法

一,遞推演算法概述: 和列舉演算法http://blog.csdn.net/qq_32211827/article/details/72970404相比,遞推演算法就比較“聰明”了,遞推演算法能通過已

基於深度學習的目標檢測演算法綜述截止20180821

參考:https://zhuanlan.zhihu.com/p/40047760 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技

基本演算法學習—— 排序

排序 一、氣泡排序   演算法思想: 在每一次對比排序中將大的數放在後面,整個排下來後,就變成有序的數列了   演算法實現:       1.(範圍為整個陣列),從前向後兩兩比較,如果前面比後面大就交換位置。第一遍後就將大的放在了最後       2.(縮小範圍),從頭再次重

劍指offer演算法二維陣列中的查詢

劍指offer演算法題(一) 題目1:二維陣列中的查詢 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 思路分析:  從左上往右下方來解決這個問題  例如在

容錯分散式一致性演算法——totem

  第一次接觸分散式一致性演算法是通過totem,現在開始研究paxos和raft之類,後面也是會做筆記的,便先將totem演算法先寫下來,用於對比學習。   totem協議,全稱是The Totem Single-Ring Ordering and Membership Protoco

演算法學習揹包佇列和棧

揹包類bag public class My_Bag<T> { public My_Bag() { array = null; } private T[] array;

演算法訓練

1.zoj-4049 簡單的程序模擬,大部分情況下可以直接出答案,當進入死迴圈的時候,不難發現,迴圈中所得值會出現重複,因此可視重複為死迴圈的標誌,使用一個bool陣列進行標記即可,程式碼如下: #include <iostream> #include<cstrin

【精選】JAVA入門演算法

跌倒了,一定要爬起來。不爬起來,別人會看不起你,你也會失去機會。 1.題目:打印出楊輝三角形(要求打印出10行) 什麼是楊輝三角呢?下面這個就是 楊輝三角最大的特性就是每個數字都是該數字肩上的兩個數字之和,這道題經常在學習二維陣列和迴圈控制中出現 我們可以假設

演算法學習揹包佇列和棧優化

以棧為例,之前是增加一個元素就要重新new一個比原來大1的陣列出來替換原始陣列。 public void Push(T item) { int size = Size(); T[] newarray = new T[size + 1]; for (int i =

比較全面的Adaboost演算法總結

目錄: 1. Boosting演算法基本原理 2. Boosting演算法的權重理解 3. AdaBoost的演算法流程 4. AdaBoost演算法的訓練誤差分析 5. AdaBoost演算法的解釋 6. AdaBoost演算法的正則化 7. AdaBoost演算法的過

GIS演算法基礎 計算幾何基礎

最近在學習GIS演算法,在學習過程中,想把一些經典的演算法或者思想記錄下來,分享給大家   計算幾何基礎本來是計算機圖形學的內容,但是GIS在影象處理中是離不開計算機處理的,所以GIS演算法基礎第一個應該是計算幾何基礎。 如何把空間實體的點線面以及他們之間的關係(例如,相交,包

基於深度學習的目標檢測演算法綜述

前言 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技術。從最初2013年提出的R-CNN、OverFeat

c++演算法模板:基礎演算法模板:

1.高精演算法: 加法: while(i<=a加數的位數|| i<=b加數的位數) { c[i]=a[i]+b[i]+x; x=c[i]/10; c[i]%=10; i++; } 注意:加法需要逆序儲存,因為如

資料結構及演算法學習

一、資料結構範疇   資料結構是一門與程式設計密切相關的課程,而程式設計就是演算法+資料結構,演算法即是處理資料的策略,而資料結構就是表達程式設計的模型,可以說任何一個程式設計問題,我們都可以從演算法和模型出發。概而言之,資料結構就是描述了程式設計的數學模型及在其程式設計上的表示和實現。 二、基本概念

Python遺傳和進化演算法框架Geatpy快速入門

Geatpy是一個高效能的Python遺傳演算法庫以及開放式進化演算法框架,由華南理工大學、華南農業大學、德州奧斯汀公立大學的學生聯合團隊開發。 它提供了許多已實現的遺傳和進化演算法相關運算元的庫函式,如初始化種群、選擇、交叉、變異、重插入、多種群遷移、多目標優化非支配排序

《機器學習實戰》knn演算法

K最近鄰(k-Nearest Neighbor,KNN)分類演算法可以說是最簡單的機器學習演算法了。它採用測量不同特徵值之間的距離方法進行分類。它的思想很簡單:存在一個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一個數據與所屬分類的對應關係。輸入沒有標

程式設計菜鳥到大佬之路:演算法基礎

第一天學習精要 列舉 完美立方 列舉:基於逐個嘗試答案的一種問題求解策略。 例題1:完美立方 題目描述 形如