導航:首頁 > 源碼編譯 > 語言演算法代碼是什麼

語言演算法代碼是什麼

發布時間:2025-09-20 00:51:34

A. C語言24點的演算法

下面是我自己寫的一個程序:

我的解法是把這個問題分解成了兩個子問題,首先求出4個數字的無重復全排列,放到一個數組裡面,再對沒一個排列情況,從頭到尾窮舉所有的四則運算情況。注意到除法是特殊的,我用x/y表示x除以y,用x|y表示x分之y。注意到,如果窮舉的解得到-24的話,只需要把有減法的地方調換一下順序就可以了,代碼如下
/***********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int index[4]={0,1,2,3};//used to generate subscription collection
int sub[4]; //used in p() only
float f[4]={8.0f,3.0f,3.0f,8.0f};//the 24 point numbers
float fs[24][4];//all possible permutaions of f
float tmp[4]; //used for buf
int g_number=0; //number of permutations
float RES[4];
char op[3];
void p(int idx){//求全排列的函數
if(idx==4){
for(int i=0;i<4;++i){tmp[i]=f[sub[i]];}
for(int g=0;g<g_number;++g){if(memcmp(fs[g],tmp,sizeof(float)*4)==0)return;}
for(int i=0;i<4;++i){fs[g_number][i]=f[sub[i]];}
g_number++;
return;
}
for(int i=0;i<4;++i){//make subscription collections
bool pflag=false;
for(int j=0;j<idx;++j){if(sub[j]==i)pflag=true;}
if(pflag==true)continue;
sub[idx]=index[i];
p(idx+1);
}
}
void solve(int L){//對某個排列,遞歸求所有四則運算的結果,找到就退出
if(L==3){
if(fabs(fabs(RES[L])-24.0f)<0.01f){
printf("Found solution,RES=%f,((%d%c%d)%c%d)%c%d\n",RES[L],
(int)f[0],op[0],
(int)f[1],op[1],
(int)f[2],op[2],
(int)f[3]);
exit(0);
}
return;
}
for(int j=0;j<5;++j){//j judges for operators
if(j==0){RES[L+1]=RES[L]+tmp[L+1];op[L]='+';solve(L+1);}
if(j==1){RES[L+1]=RES[L]-tmp[L+1];op[L]='-';solve(L+1);}
if(j==2){RES[L+1]=RES[L]*tmp[L+1];op[L]='*';solve(L+1);}
if(j==3&&tmp[L+1]!=0)
{RES[L+1]=RES[L]/tmp[L+1];op[L]='/';solve(L+1);}
if(j==4&&RES[L+1]!=0)
{RES[L+1]=tmp[L+1]/RES[L];op[L]='|';solve(L+1);}
}
}
int main(int argc,char* argv[]){//should avoid 0
f[0]=atoi(argv[1]);
f[1]=atoi(argv[2]);
f[2]=atoi(argv[3]);
f[3]=atoi(argv[4]);
p(0);
for(int i=0;i<g_number;++i){
memcpy(tmp,fs[i],sizeof(float)*4);
RES[0]=tmp[0];
for(int t=0;t<4;++t){ printf("%d,",(int)tmp[t]); }
printf("\n");
solve(0);
}
printf("Found no solution :( \n");
return 0;
}

----------編譯運行,運行時的參數就是4個數字
g++ p.cpp && ./a.out 1 5 5 5
1,5,5,5,
Found solution,RES=-24.000000,((1/5)-5)*5
g++ p.cpp && ./a.out 8 3 3 8
8,3,3,8,
Found solution,RES=-24.000006,((8/3)-3)|8
上面這個解寫出來就是
8
--------- = 24
3-(8/3)
主程序為了簡化,省去了對輸入的檢查,樓主可以自己添加。

B. 求遺傳演算法(GA)C語言代碼

.----來個例子,大家好理解..--
基於遺傳演算法的人工生命模擬
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
#include<time.h>
#include<string.h>
#include "graph.c"
/* 宏定義 */
#define TL1 20 /* 植物性食物限制時間 */
#define TL2 5 /* 動物性食物限制時間 */
#define NEWFOODS 3 /* 植物性食物每代生成數目 */
#define MUTATION 0.05 /* 變異概率 */
#define G_LENGTH 32 /* 個體染色體長度 */
#define MAX_POP 100 /* 個體總數的最大值 */
#define MAX_FOOD 100 /* 食物總數的最大值 */
#define MAX_WX 60 /* 虛擬環境的長度最大值 */
#define MAX_WY 32 /* 虛擬環境的寬度最大值 */
#define SX1 330 /* 虛擬環境圖左上角點x坐標 */
#define SY1 40 /* 虛擬環境圖左上角點y坐標 */
#define GX 360 /* 個體數進化圖形窗口的左上角點X坐標 */
#define GY 257 /* 個體數進化圖形窗口的左上角點Y坐標 */
#define GXR 250 /* 個體數進化圖形窗口的長度 */
#define GYR 100 /* 個體數進化圖形窗口的寬度 */
#define GSTEP 2 /* 個體數進化圖形窗口的X方向步長 */
#define R_LIFE 0.05 /* 初期產生生物數的環境比率 */
#define R_FOOD 0.02 /* 初期產生食物數的環境比率 */
#define SL_MIN 10 /* 個體壽命最小值 */
/* 全局變數 */
unsigned char gene[MAX_POP][G_LENGTH]; /* 遺傳基因 */
unsigned char iflg[MAX_POP]; /* 個體死活狀態標志變數 */

C. C語言程序的演算法怎麼算

C語言程序的演算法主要通過順序、選擇和循環三種基本結構來實現

  1. 順序結構

    • 這是最基本的演算法結構,指按照語句的順序依次執行。在C語言中,順序結構是最簡單的執行流程,每條語句都會按照出現的順序被執行。
  2. 選擇結構

    • 選擇結構用於有條件的情況,根據條件的真假來決定執行哪一段代碼。在C語言中,常見的選擇結構有ifelse語句和switchcase語句。
    • 例如,根據成績的不同范圍來評定等級,就可以使用ifelse語句來實現:cif { grade = 'D'} else if { grade = 'C'}// 其他條件...3. 循環結構: 循環結構用於重復執行某段代碼,直到滿足某個條件為止。在C語言中,循環結構有for循環、while循環和dowhile循環。 例如,計算從1到100的累加和,就可以使用for循環來實現:cint i, sum = 0;for { sum = sum + i;}

綜上所述,C語言程序的演算法是通過這三種基本結構的組合和嵌套來實現的。在實際編程中,根據問題的具體需求,選擇合適的結構並正確地進行組合和嵌套,就可以實現復雜的演算法。

D. 用c語言編寫50的階乘的演算法

#include<stdio.h>
#define N 50 /*可以是任意一個數的階乘,當然要計算機能夠存的下*/

int main()
{
int a[100], l=0, i, j;
for(i=0; i<100; i++)
a[i]=0;
a[0]=1;

for(i=2; i<=N; i++)
{
for(j=0; j<=l; j++)
a[j] *= i;
l+=3;
for(j=0; j<l; j++)
if(a[j]>9)
{
a[j+1]+=a[j]/10;
a[j] %=10;
}
while(a[l]==0) l--;
}

for(i=l; i>=0; i--)
printf("%d", a[i]);
printf("\n");
}

看了 樓下兩個 用int 存儲 50!
感覺有點不可思議, 至少應該用double啊,用double雖然不能保證精度,但至少可以很接近結果。

3樓的 一句話:「老師說過,可以自已定義一個類型來表示更大的數。。。」

自己是可以定義,你可以定義任意類型。只不過需要你自己來實現。 50!這種問題 就相當於 大數 的操作。
網上可以下載到大樹類, 支持 大數的+ - * / 開平方, 開根號,(幾乎所有math里的函數)...。

E. 基本演算法語言(高一數學)

這里糾正ls錯誤
基本演算法語句符號:
=:賦值號
>、<:大於、小於
== !=:等於,不等於
>=、<=:大於等於、小於等於
abs(x):|x|(x是整數)
fabs(x): |x|(x可以是小數)
sqrt(x):x的算術平方根
[[上面三個函數需要在程序前加上#include <math.h>]]
x % y:x÷y的余數

基本演算法語句:
[[注意:所有語句後面必須加分號,且語句區分大小寫]]
輸入語句:
scanf ("格式",變數地址);
例如: scanf ("%d",&x); 表示輸入整數x
輸出語句:
printf ("字元串[包括格式]",變數);
例如: printf ("x=%d\n",x); 表示輸出x=,後面加變數x的值,最後換行
賦值語句:
變數=表達式;
例如y=x*x*x+24*x*x;
利用賦值語句交換a、b的值:
x=a;
a=b;
b=x;
條件語句:
if (條件) {
語句
}
或者
if (條件) {
語句1
} else {
語句2
}
還有
if (條件) {
語句1
} else if (條件2) {
語句2
} else {
語句3
}

循環語句:
while (條件) {
循環體
}
或者
do {
循環體
} while (條件);

閱讀全文

與語言演算法代碼是什麼相關的資料

熱點內容
python實現http伺服器端 瀏覽:254
鋸木材演算法 瀏覽:40
編程的演算法有哪些 瀏覽:523
java判斷類是否為空 瀏覽:833
程序員早餐軟體 瀏覽:475
java程序員的工作范圍 瀏覽:732
python最大最小 瀏覽:302
程序員高工資高 瀏覽:5
php調用函數外的變數 瀏覽:610
python用雙重循環輸出圖形 瀏覽:228
潛伏在漲停前源碼 瀏覽:886
演算法導論原書第三版 瀏覽:673
江西農商線上app怎麼改號碼 瀏覽:97
vba文件夾動態目錄 瀏覽:223
深圳單片機輔導班 瀏覽:81
程序員城市去向統計圖 瀏覽:30
instagram蘋果伺服器地址怎麼填 瀏覽:86
php在線閱讀器 瀏覽:404
黑馬程序員qt第5講 瀏覽:733
語言演算法代碼是什麼 瀏覽:135