- 浏览: 291391 次
- 性别:
- 来自: 武汉
最新评论
-
zh1159007904:
大侠,你这个程序的递归部分看不懂,能不能麻烦解释一下递归的思路 ...
求21位水仙花数(C语言实现) -
shenma_IT:
我是一楼的神马_CS哦 再次表示感谢!!
求21位水仙花数(C语言实现) -
shenma_IT:
好 万分感谢 !!
求21位水仙花数(C语言实现) -
Touch_2011:
shenma_CS 写道你好! 我看了你的代码 有好多让我佩服 ...
求21位水仙花数(C语言实现) -
Touch_2011:
乘法是模拟数学上两个数相乘,但在处理进位方面可能有点不同。比如 ...
求21位水仙花数(C语言实现)
文章列表
博客地址:
http://blog.csdn.net/touch_2011/article/details/6831924
/*
2011第二届国信蓝点杯全国软件专业人才设计与开发大赛
2011第二届国信蓝点杯全国软件专业人才设计与开发大赛选拔赛试题-Java语言高职组最后一题题:
A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛, ...
/*
整数的划分问题。
如,对于正整数n=6,可以分划为:
6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1+1
现在的问题是,对于给定的正整数n,编写算法打印所有划分。
用户从键盘输入 n (范围1~10)
程序输出该整数的所有划分。
*/
#include<stdio.h>
#include<string.h>
//计算划分种数
int divideNumber(int n,int m)
{
if(m== ...
/*
* 几种排列组合的算法
*/
#include<stdio.h>
int a[20];
int n;
//打印数组
void showArray(int *a)
{
int i;
for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
}
//翻转法
void overturn()
{
int i,temp,temp1,temp2,j;
int b[20];
for(i=1;i<=n;i++)
...
这是C语言选拔赛最后一题,题目如下:
/*
* c语言竞赛初赛本科最后一题
*/
#include<stdio.h>
#include<string.h>
//矩阵
char matrix[5][5];
//存储26个字母在矩阵中的行号和列号,不在矩阵中行列号均为-1
int charSite[26][2];
//填充matrix矩阵
void init()
{
int i,j,k=0,len;
char str[26];
gets(str);
len=(int)strlen(str);
for( ...
1.基本思路:
a.顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。
b.贪心算法一般可以先做一个排序,然后选择。
2.例题:
(1)迪杰斯特拉算法求最短路径
1、 基本思想
将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算。通常用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上 ...
1.递归的思想:
设计一个递归函数,明确这个递归函数的定义,在这个函数里面反复调用自己从而求出问题的解。递归很多时候用于求有多少种解法的题目:这时要分清有多少种情况,然后把每一种情况产生的解的个数相加。
2.例题分析
(1)放苹果:M个同样的苹果放N个同样的盘子,允许有盘子空着, 问有多少种放法。注意:5 1 1和1 5 1是同一种放法
分析:分两种情况:a.至少有一个盘子为空,此时放法种数与减去这个空盘子的放法种数相同。b.所有盘子都不为空,此时可以从每个盘子里拿掉一个苹果而不影响放
1、分治法思想:
将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
2.分治法特征:
1) 该问题的规模缩小到一定的程度就可以容易地解决
2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
3) 利用该问题分解出的子问题的解可以合并为该问题的解;
4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键, ...
1、回溯法的基本思想
(1)在确定解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点。
(2)在当前扩展结点处,搜索向纵深方向移至一个新结点。这个新结点成为新的活结点,并成为扩展结点。
(3)如果在当前扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应往回移动(回溯)到最近的活结点处,并使该结点成为当前的扩展结点。
(4)回溯法按上述方式递归地在解空间中搜索,直到找到所要求的解或返回至根结点为止。
1.大整数加法
2.大整数减法
3.大整数乘法
4.大整数除法(通过不断的做减法)
5.麦森树
具体解析看图片附件
1.描述
有些问题难以找到公式或规律来解决,可以按照步骤,模拟人的解决行为,一步一步往下走就能找到答案。
2.实例分析
(1)(北大考研机试)一根长度为1米的木棒上有若干只蚂蚁在爬动。它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右。如果两只蚂蚁碰头,则它们立即交换速度并继续爬动。三只蚂蚁碰头,则两边的蚂蚁交换速度,中间的蚂蚁仍然静止。如果它们爬到了木棒的边缘(0或100厘米处)则会从木棒上坠落下去。在某一时刻蚂蚁的位置各不相同且均在整数厘米处(即1,2,3
/*
* 题目描述:有一个农夫,带着一只狼、一只羊、一颗白菜过河。其中农夫不在的时候狼会吃羊,
* 羊会吃白菜。只有一只船,且每次农夫最多只能带一样物品过河。求解决方案。
*
* 思路:1. 过程回溯法。把人、狼、羊、白菜看成A、B、C、D。过河的时候从ABCD中选两个过河,在
* 选一个回来。若发生狼跟羊、羊跟白菜在同一个岸边,且农夫不在场,则回溯.
*
* 2. 图的遍历。设从南岸到北岸,在南岸ABCD的各个状态是(用二进制表示):0000,在
* 北岸的时候各个状态是:1111。所以过河问 ...
;搜索数组,看是否存在CONST
DATA SEGMENT
ARRAYB DB 2,3,1,8,7FH,-5
COUNT EQU $-ARRAYB ;数组长度
CONST EQU 7FH ;判断数组中是否存在此元素
ADDRES DD 0 ;若存在,存放元素的地址
SCANTIME DW 0 ;若存在,存放搜索次数
DATA ENDS
STACK SEGMENT
DW 100H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME SS:STACK,DS:DATA,CS:CODE
MAI ...
/*
* 各种基本排序算法实现(以由小到大为例)
*/
#include<stdio.h>
#define ARRAY_LENGTH 50
//插入排序
void inseartSort(int a[],int length)
{
int i,j,index,temp;
for(i=0;i<length;i++){//数组a中元素逐个有序插入数组a
for(j=0;j<i;j++) //寻找第i个元素的插入位置
if(a[i]<a[j])
break;
index=j;
temp=a[i];
...