导航:首页 > 源码编译 > c穷举算法

c穷举算法

发布时间:2022-12-26 09:24:22

① c语言中如何穷举所有路径

不需要穷举,你看看离散数学或数据结构中的计算最短路的Dijkstra算法,改成最长路径法即可。

② C语言问题程序设计题例题 4-8 穷举算法 这一题 那两句for是什么意思 求详细的解答谢谢

一、代码解释:

  1. for(m=0 ;m<=9 ;m++)

    解释:m(根据题意代表男人人数),m从0遍历到9

  2. for(w=0 ;w<=12 ;w++)

    解释:w(根据题意代表女人人数),w从0遍历到12

  3. printf里的“ ”表示Tab键的大空格(显示得好看一些)

二、程序思路

  1. 很简单暴力枚举,因为男+女+小孩=36,那么男人可能是0~9个(4*9=36,所以最多9个男人),同理女人可能是0~12个(12*3=36)。

  2. 用两个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,然后循环倒数第二位,第二位每动一次,末尾就动一次。
依此类推。。。。

阅读全文

与c穷举算法相关的资料

热点内容
单片机高吸收 浏览:427
怎么区分五代头是不是加密喷头 浏览:244
hunt测试服务器是什么意思 浏览:510
2013程序员考试 浏览:641
毕业论文是pdf 浏览:736
服务器跑网心云划算吗 浏览:471
单片机定时器计数初值的计算公式 浏览:801
win7控制台命令 浏览:567
猫咪成年app怎么升级 浏览:692
360有没有加密软件 浏览:315
清除cisco交换机配置命令 浏览:751
华为删除交换机配置命令 浏览:473
shell打包命令 浏览:827
加密狗插上输不了密码 浏览:187
大学单片机相关科目 浏览:23
自己建了服务器地址 浏览:698
命令按钮的属性设置 浏览:965
证券技术分析pdf 浏览:779
linux命令连接oracle 浏览:202
垫江停车收费桩怎么上App 浏览:135