① c語言中如何窮舉所有路徑
不需要窮舉,你看看離散數學或數據結構中的計算最短路的Dijkstra演算法,改成最長路徑法即可。
② C語言問題程序設計題例題 4-8 窮舉演算法 這一題 那兩句for是什麼意思 求詳細的解答謝謝
一、代碼解釋:
for(m=0 ;m<=9 ;m++)
解釋:m(根據題意代表男人人數),m從0遍歷到9
for(w=0 ;w<=12 ;w++)
解釋:w(根據題意代表女人人數),w從0遍歷到12
printf里的「 」表示Tab鍵的大空格(顯示得好看一些)
二、程序思路
很簡單暴力枚舉,因為男+女+小孩=36,那麼男人可能是0~9個(4*9=36,所以最多9個男人),同理女人可能是0~12個(12*3=36)。
用兩個for循環嵌套來表示:男0~9人,和女0~12人的任意組合狀態,用36-男-女即為小孩人數,然後計算總的搬磚數量,看看符不符合36塊磚,符合則顯示結果,注意該方程的解可能不止一個哦!所以顯示了結果還繼續算下去,直到遍歷完所有組合。
③ C語言用窮舉法編寫3×3的幻方
這是我用窮舉法寫的
#include "iostream.h"
int a[9];
void PaiLie(int n) //生成1~9的全排列
{
for(int i=0;i<9;i++)
{
for(int i=0;i<9;i++)
if(a[i]<n+1)a[i]=0;
if(!a[i])
{a[i]=n;
if(n>1)
PaiLie(n-1);
else
{
if ( //判定橫豎斜之和為15
a[0]+a[1]+a[2]==15&&a[3]+a[4]+a[5]==15&&a[6]+a[7]+a[8]==15&&
a[0]+a[3]+a[6]==15&&a[1]+a[4]+a[7]==15&&a[2]+a[5]+a[8]==15&&
a[0]+a[4]+a[8]==15&&a[2]+a[4]+a[6]==15
)
{for(int j=0;j<3;j++)
{
for(int i=0;i<3;i++)
cout<<a[j*3+i]<<' ';cout <<endl;
}
cout <<endl;}
}
}
}
}
main()
{
PaiLie(9);
}
過去看這個帖子,最佳答案沒用窮舉
http://..com/question/56156324.html
④ c 語言中「窮舉」是啥意思
窮舉 是列出所有的可能情況,對其一一判斷
你說的是不是「枚舉」
枚舉是指規定某個變數只能取幾個固定的值
⑤ 百錢百雞(窮舉演算法)
設公雞、母雞、小雞分別為x、y、z 只,由題意得:
x+y+z =100……①
5x+3y+(1/3)z =100……②
有兩個方程,三個未知量,稱為不定方程組,有多種解。
令②×3-①得:7x+4y=100;
即:y =(100-7x)/4=25-(7/4)x
由於y 表示母雞的只數,它一定是自然數,而4 與7 互質,因此x 必須是4 的倍數。我們把它寫成:x=4k(k 是自然數),於是y=25-7k,代入原方程組,可得:z=75+3k。把它們寫在一起有:
x =4k
y =25 - 7k
z =75+ 3k
一般情況下,當k 取不同數值時,可得到x、y、z 的許多組值。但針對本題的具體問題,由於x、y、z 都是100 以內的自然數,故k 只能取1、2、3 三個值,這樣方程組只有以下三組解:
一、 x =4;y =18;z =78
二、 x =8;y =11;z =81
三、 x =12;y =4;z =84
⑥ 有36頭豬,每天殺單數頭,分九天殺完,怎麼用C++或C語言程序證明無解
一、窮舉演算法:
窮舉每天殺豬數,若最後9天殺不完或提早殺完則證明無解。
利用遞歸完成:
#include <stdio.h>
//PIG頭豬,分DAY天殺完,每天殺單數頭
const int DAY=9;
const int PIG=36;
bool DFS(int day,int remain) //第day天剩下remain只豬,若最後能殺完則返回1,否則返回0
{
if(day>DAY) //如果DAY天已過,剩餘0隻返回1,即能殺完,否則返回0
return remain==0;
int i;
for(i=1;i<=remain;i+=2) //窮舉第day天殺豬的頭數i(i為奇數)
if(DFS(day+1,remain-i))//當第day+1天剩下remain-i頭豬,而最後能殺完所有豬時,返回1
return 1;
return 0; //若各種情況都不能則返回0
}
int main()
{
if(DFS(1,PIG)) //第一天剩下PIG頭豬能否殺完
puts("有解");
else
puts("無解");
getchar();
return 0;
}
二、推出數學關系式求解
設第i天殺ki頭豬
則DAY天中共殺 k1+k2+k3+...+kDAY頭豬
假設DAY天能殺完PIG頭豬
則有 k1+k2+k3+...+kDAY==PIG (1)
因為每天殺奇數頭豬,不妨設ki=2*pi+1 (pi>=0) (2)
則由(1)(2)得 PIG==2*(p1+p2+p3+...+pDAY)+DAY
顯然如果等式成立,則PIG與DAY奇偶性相同
即
PIG%2==DAY%2
#include <stdio.h>
const int DAY=9;
const int PIG=36;
int main()
{
if(PIG%2==DAY%2)
puts("有解");
else
puts("無解");
getchar();
return 0;
}
⑦ c語言:輸入六位數字密碼作為破解目標,用窮舉法編程,輸出破解成功是第幾次
破解成功是第幾次關鍵是看演算法怎麼做,從左到右窮舉和從右到左窮舉結果互補
#include<stdio.h>
#defineFor(i,flag)for(i=0;i<=9&&flag==0;++i)
intmain()
{
inta[6];
intcount=1,flag=0;
charpassword[7];
scanf("%s",password);
For(a[0],flag)
For(a[1],flag)
For(a[2],flag)
For(a[3],flag)
For(a[4],flag)
For(a[5],flag)
{
if(password[0]==a[0]+'0'&&password[1]==a[1]+'0'&&password[2]==a[2]+'0'
&&password[3]==a[3]+'0'&&password[4]==a[4]+'0'&&password[5]==a[5]+'0')
{
flag=1;
break;
}
else
++count;
}
printf("%d",count);
return0;
}
⑧ c語言能給個窮舉、迭代、遞推的舉例(要有分析)。。。
窮舉的意思能簡單, 就是'一個個猜過去'
比如要破解一個8位數的密碼, 就是從00000000到99999999的全部數字一個個試過去
這點數字對現在的計算機來說幾乎不要時間
迭代是指循環運算, 比如
for ( int i = 0; i < 99999999; ++i) 這個循環就叫做迭代
至於遞推, 以下抄自網路
遞推演算法是一種用若干步可重復的簡運算(規律)來描述復雜問題的方法. 遞推是序列計算機中的一種常用演算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定象的值。其思想是把一個復雜的龐大的計算過程轉化為簡單過程的多次重復,該演算法利用了計算機速度快和不知疲倦的機器特點。
植樹節那天,有五位同學參加了植樹活動,他們完成植樹的棵樹都不相同。問第一位同學植了多少棵時,他指著旁邊的第二位同學說比他多植了兩棵;追問第二位同學,他又說比第三位同學多植了兩棵;... 如此,都說比另一位同學多植兩棵。最後問到第五位同學時,他說自己植了10棵。到底第一位同學植了多少棵樹?
分析:設第一位同學植樹的棵樹為a1,欲求a1,需從第五位同學植樹的棵數a5入手,根據「多兩棵」這個規律,按照一定順序逐步進行推算:
(1) a5=10;
(2) a4=a5+2=12;
(3) a3=a4+2=14;
(4) a2=a3+2=16;
(5) a1=a2+2=18;
遞推演算法以初始(起點)值為基礎,用相同的運算規律,逐次重復運算,直至運算結束。這種從「起點」重復相同的方法直至到達一定「邊界」,猶如單向運動,用循環可以實現。遞推的本質是按規律逐次推出(計算)先一步的結果。
⑨ c語言問題(窮舉)!在線 急!!!
//這題還真難,呵呵,不過不在話下,用dev c++調試過了,樓上的不對吧
//排列組合公式:C(x+1,y - 1)/A(y,y)
//C語言實現:
#include <stdio.h>
int main(void){
long long int result;
int x,y;
printf("請輸入x和y\n");
scanf("%i%i",&x,&y);
long long int fact(int n);
result=fact(x+1)/(fact(y-1)*fact(x-y+2)*fact(y));
printf("%i",result);
return 0;
}
//為了方便,先寫個階乘函數
long long int fact(int n){
long long int r = 1;
for(int i = 1;i < n + 1;++i){
r *=i;
}
return r;
}
⑩ 100分的簡單問題:C#窮舉演算法
要是代碼的話,很長。不是100分的問題,所以這些人都懶得寫,呵呵。方法大概說一下吧:
首先確定你要選取的位數,然後在這些字元裡面,按順序依次提取字元,進行全排列,輸出。
然後逐個開始更換字元,從最末端開始循環,從0-9-a-z-A-Z,然後循環倒數第二位,第二位每動一次,末尾就動一次。
依此類推。。。。