没有合适的资源?快使用搜索试试~ 我知道了~
2021年程序设计竞赛基础实训完整版.doc
0 下载量 20 浏览量
2022-12-13
20:53:59
上传
评论
收藏 98KB DOC 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/87275411/0001-070d331348e43be86863db428988284b_thumbnail-wide.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
25页
2021年程序设计竞赛基础实训完整版.doc
资源推荐
资源详情
资源评论
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/release/download_crawler_static/87275411/bg1.jpg)
程序设计竞赛基本实训 22
1 解不等式
n
m
1
6
1
5
1
4
1
3
1
2
1
1 �������� �
其中 m 为从键盘输入正整数,式中符号为二个“+”号后一种“-”号,即分母能被 3
整除时为“-”。
输入正整数 m,输出满足不等式 n。
测试数据: (1) m=4 (2) m=7
设计要点 1:
式中浮现减运算,导致不等式解也许分段。
设立条件循环,每三项(包括二正一负)一起求和,得一种区间解。
然后回过头来一项项求和,得个别离散解。
为论述以便,记
n
ns
1
6
1
5
1
4
1
3
1
2
1
1)( �������� �
(1) 通过循环知 s(d+1)>m,且 n=d+1 为“-”,可得 n=d 为一种解;
而 n=d+2 时 1.0/(n+3)为“+”,可得 s(d+2)>m;后来各项中,“-”项不大于其前面“+”
项,可知对于 n>d+2 有 s(n)>m 成立。
因而有区间解:n≥d
(2) 在 n<d 时与否有解,逐个求和检查拟定离散解。这一步不能省,否则浮现遗解。
程序设计 1:
// 解不等式:m<1+1/2-1/3+1/4+1/5-1/6+...+-1/n
#include <stdio.h>
void main()
![](https://csdnimg.cn/release/download_crawler_static/87275411/bg2.jpg)
{ long d,n,m,k;double s;
printf("\n 请输入 m:");scanf("%d",&m);
n=-2;s=0;
while(s<=m)
{ n=n+3;s=s+1.0/n+1.0/(n+1)-1.0/(n+2);}
d=n+1;s=0; // 可拟定区间解 n≥d(1)
for(k=1;k<=n;k++)
{ if(k%3>0) s=s+1.0/k;
else s=s-1.0/k;
if(s>m) printf(" n=%ld,",k); // 逐个得离散解
}
printf("n>=%ld \n",d);
}
程序运营示例:
请输入 m:4
n=10151,n=10153,n>=10154
请输入 m:7
n=82273511,n=82273513,n>=82273514
注意:要特别注意,不要把离散解遗失。
思考:如果把后一种离散解写入区间解中?
设计要点 2:
为论述以便,记
n
ns
1
6
1
5
1
4
1
3
1
2
1
1)( �������� �
(1) 通过循环累加,当加到 s=s+1.0/n+1.0/(n+1)-1.0/(n+2);得 s(n+2)>m,令
d=n+1,可知:n≥d 为解;
![](https://csdnimg.cn/release/download_crawler_static/87275411/bg3.jpg)
(2) 此时,s(n)有也许不不大于 m,因而在原 s 基本上 s-1.0/d+1.0/(d+1)得 s(n):
若 s(n)>m,合并得区间解:n≥d-1;
若 s(n)<m,区间解为:n≥d;(因可必定 s(n-1)<m)
但 s(n-2)尚有也许不不大于 m,因而在上 s 基本上 s+1.0/(d-2)-1.0/(d-1),得 s(n-2):
若 s(n-2)>m,得一种离散解:n=d-3;
若 s(n-2)<m,没有离散解。
程序设计 2:
// 解不等式:m<1+1/2-1/3+1/4+1/5-1/6+...+-1/n
#include <stdio.h>
void main()
{ long d,n,m;double s;
printf("\n 请输入 m:");scanf("%d",&m);
n=-2;s=0;
while(s<=m)
{ n=n+3;s=s+1.0/n+1.0/(n+1)-1.0/(n+2);}
d=n+1; // 可拟定区间解 n≥d(1)
s=s-1.0/d+1.0/(d+1); // 得 s(n)
if(s>m) printf(" n>=%ld \n",d-1); // 输出区间解
else printf(" n>=%ld \n",d);
s=s+1.0/(d-2)-1.0/(d-1); // 得 s(n-2)
if(s>m) printf(" n=%ld \n",d-3); // 输出一种离散解
}
数据测试:
请输入 m:4
![](https://csdnimg.cn/release/download_crawler_static/87275411/bg4.jpg)
n>=10153
n=10151
请输入 m:7
n>=82273513
n=82273511
程序设计 3:请判断如下程序与否对的?
// 解不等式:m<1+1/2-1/3+1/4+1/5-1/6+...+-1/n
#include <stdio.h>
void main()
{ double n,m,s;
printf("\n 请输入 m:");scanf("%lf",&m);
n=0;s=3.0/2;
while(s<=m)
{ n=n+3;s=s-1.0/n+1.0/(n+1)+1.0/(n+2);}
d=n+2;
printf(" n=%.0f,",d); // 得一种离散解(1)
s=s-1.0/(n+3)+1.0/(n+4);d=n+4;
if(s>m) printf(" n>=%.0f\n",d); // 可拟定区间解 n≥d(2)
else printf(" n>=%.0f\n",d+1); // ??
}
(1) 一方面 s(d)>m,n=d 为一种解;
而 s(d-3)<=m,n=d-2 为“-”项,其绝对值不不大于 n=d-1“+”项,可得 s(d-1)<m;
且知 n<d 时无解。
![](https://csdnimg.cn/release/download_crawler_static/87275411/bg5.jpg)
同步由
0
3
1
2
1
1
11
�
�
�
�
�
�
��
nnnn
,可得 s(d+1)<m,即 n=d 为一种离散解。
(2) 当 s(n+4)>m 时,后来“-”项绝对值不大于其前面“+”项,故得区间解 n≥d;
当 s(n+4)<=m 时,因
0
5
1
4
1
3
1
�
�
�
�
�
�
�
nnn
可知 s(n+5)>m;但不能拟定 s(n+6)>0,
因而不能拟定 n≥d+1 为区间解!
2 求最大值
设指定区间[a,b]内正整数 x,y,z,w 满足
2222
wzyx ���
其中 a≤x<y<z<w≤b,试求 s=x+y+z+w 最大值。
输入正整数 a,b(1≤a<b<10000),输出 s 最大值。
测试数据:
(1) a=500,b=1000
(2) a=1000,b=
设计要点:对每一组满足条件解,通过比较求得最大值。
程序设计:
// 求最大值
#include <stdio.h>
#include <math.h>
void main()
{long a,b,d,s,x,y,z,w,max;
printf(" 请输入区间[a,b]上下限 a,b:");
scanf("%ld,%ld",&a,&b);
max=0;
剩余24页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
zzzzl333
- 粉丝: 711
- 资源: 7万+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)