没有合适的资源?快使用搜索试试~ 我知道了~
算法设计9题编程代码.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 18 浏览量
2022-05-08
12:19:30
上传
评论
收藏 78KB DOC 举报
温馨提示
试读
14页
算法设计9题编程代码.doc
资源推荐
资源详情
资源评论
编程题 von
1.P99【例 32】警察局抓了 a,b,c,d 四名偷窃嫌疑犯,其中只有一人是小偷。审问中
a 说:“我不是小偷。”
b 说:“c 是小偷。”
c 说:“小偷肯定是 d。”
d 说:“c 在冤枉人。”
现在已经知道四个人中三人说的是真话,一人说的是假话,问到底谁是小偷?
问题分析:将 a,b,c,d 将四个人进行编号,号码分别为 1,2,3,4。则问题可用枚举尝试
法来解决。
算法设计:用变量 x 存放小偷的编号,则 x 的取值范围从 1 取到 4,就假设了他们中的某
人是小偷的所有情况。四个人所说的话就可以分别写成:
a 说的话:x<>1
b 说的话:x=3
c 说的话:x=4
d 说的话:x<>4
注意:在 x 的枚举过程中,当这四个逻辑式的值相加等于 3 时,即表示“四个人中三人说的
是真话,一人说的是假话”。
程序代码:
#include<stdio.h>
void main( )
{ int x;
for(x=1;x<=4;x++)
if((x!=1)+(x==3)+(x==4)+(x!=4)==3)
printf("%c is a thief.",(64+x));
}
运行结果:
c is a thief .
2.P100【例 33】3 位老师对某次数学竞赛进行了预测。他们的预测如下:
甲说:学生 A 得第一名,学生 B 得第三名。
乙说:学生 C 得第一名,学生 D 得第四名。
丙说:学生 D 得第二名,学生 A 得第三名。
竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,试编程输出
A、B、C、D 各自的名次。
问题分析:用数 1,2,3,4 分别代表学生 a,b,c,d 获得的名次。问题就可以利用三
重循环把所有的情况枚举出来。
算法设计:
1)用 a,b,c,d 代表四个同学,其存储的值代表他们的名次。
设置第一层计数循环 a 的范围从 1 到 4;
设置第二层计数循环 b 的范围从 1 到 4;
编程题 von
设置内计数循环 c 的范围从 1 到来 4;
由于无并列名次,名次的和为 1+2+3+4=10,由此可计算出 d 的名次值为 10-a-b-
c。
2)问题的已知内容,可以表示成以下几个条件式:
(1) (a=1)+(b=3)=1
(2) (c=1)+(d=4)=1
(3) (d=2)+(a=3)=1
若三个条件均满足,则输出结果,若不满足,继续循环搜索,直至循环正常结束。
程序代码:
#include<stdio.h>
void main( )
{ int a,b,c,d;
for(a=1;a<=4;a=a+1)
for(b=1;b<=4;b=b+1)
if(a!=b)
for(c=1;c<=4;c=c+1)
if(c!=a&&c!=b)
{ d=10-a-b-c;
if(d!=a&&d!=b&&d!=c)
if(((a==1)+(b==3))==1&&((c==1)+(d==4))==1&&((d==2)+
(a==3))==1)
printf( "a= %d,b= %d,c= %d,d= %d\n",a,b,c,d);
}
}
运行结果:
A=4,b=3,c=1,d=2
3.P146【例 15】求数列的最大字段和{0,1,-1,3,-4,5,6,7,-8,88}。
问题分析:
用二分法将实例中的数据分解为{0,1,-1,3,-4},{5,6,7,-8,88},第一个子问题的解是
3,第二个子问题的解是 88,两个子问题的解不能简单的得到原问题的解。由此看出此问
题不能用二分法分解成为独立的两个子问题,子问题中间还有公共的子问题,这类问题称
为子问题重叠问题。下面仍用二分法解决这类问题中的一些简单问题,处理不独立的子问
题。
编程题 von
算法设计:如果将所给的序列 a[1:n]分为长度相等的两段 a[1:(n/2)]和 a[(n/2)+1:n]分
别为求出这两段的最大子段和,则 a[1:n]的最大子段和有 3 中情形:
情形(1) a[1:n]的最大子段和与 a[1:(n/2)]的最大子段和相同。
情形(2) a[1:n]的最大子段和与 a[(n/2)+1:n]的最大子段和相同。
情形(3) a[1:n]的最大子段和为 a[i:j)],且 1≤i≤(n/2), (n/2)+1≤j≤n。
程序代码:
#include<stdio.h>
int max_sub_sum(int a[], int left, int right);
int max_sum3(int a[],int n);
void main()
{ int aa[]={0,1,-1,3,-4,5,6,7,-8,88};
int bb=0;
bb=max_sum3(aa,9);
printf("最大子段和:%d\n",bb);
}
int max_sub_sum(int a[], int left, int right)
{ int center,i,left_sum,right_sum,s1,s2,lefts,rights;
if (left==right)
if (a[left]>0) return(a[left]) ;
else return(0);
else
{ center=(left+right)/2;
left_sum=max_sub_sum(a,left,center);
right_sum=max_sub_sum(a,center+1,right);
s1=0; /*处理情形 3*/
lefts=0;
for (i=center;i>=left;i--)
{ lefts=lefts+a[i];
if( lefts>s1) s1=lefts; }
s2=0; rights=0;
for( i=center+1;i<= right;i++)
{ rights=rights+a[i];
剩余13页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 83
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于GUI+MYSQL+JAVA图书管理系统文档说明+源码(高分大作业项目).zip
- 基于Qt使用C++实现图书管理系统源码+数据库(95分以上).zip
- 基于GUI+MYSQL+JAVA票务管理系统文档介绍+源码+数据库(高分大作业).zip
- 优先编码器除法电微分运算电路 全加器函数发生电路等电路经典Multisim仿真实验源文件合集(25个).zip
- 2331308JS课堂案例.zip
- STM32H750VBT6单片机最小系统开发板AD设计硬件(原理图+PCB+3D封装库)工程文件.zip
- 基于74LS161+ 74LS192芯片实现倒计时定时器Multisim仿真源文件,Multisim10以上版本可打开运行
- 科大讯飞语音引擎 jar包 demo,科大讯飞语音合成引擎3.0,支持4.0系统以上,文字转语音输出.zip
- Java架构面试笔试专题资料及经验(含答案)SpringBoot面试Linux面试专题及答案 合集.zip
- 头歌c语言实验答案tion-model-for-ne开发笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功