湖南中医药大学OJ—1180到1189

2023-10-13 17:40

本文主要是介绍湖南中医药大学OJ—1180到1189,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 1180: 习题5-7 求和
    • 1181: 习题5-8 求水仙花数
    • 1182: 习题5-9 完数
    • 1183: 习题5-10 分数序列求和
    • 1184: 习题5-11 求多次落地弹球高度
    • 1185: 习题5-12 猴子吃桃问题
    • 1186: 习题5-13 迭代法求平方根
    • 1187: 习题5-14 牛顿迭代法求方程的根
    • 1188: 习题5-15 二分法求方程的根
    • 1189: 习题6-1 筛选法求素数

1180: 习题5-7 求和

题目描述
求如下式子的和
在这里插入图片描述
请将结果定义为double类型。
注意求平方,不要用C数学库中提供的函数pow。
输入

输出
小数点后保留6位小数,末尾换行。

样例输入 Copy

样例输出 Copy
47977.928968

根据算式利用for循环AC

#include<stdio.h>
int main()
{int k,i,j;double a,d,b=0,c=0;for(j=1;j<=100;j++){b+=j;}for(i=1;i<=50;i++){a=i*i;b+=a;}for(k=1;k<=10;k++){d=1.0/k;b+=d;}printf("%lf\n",b);return 0;
}

1181: 习题5-8 求水仙花数

题目描述
输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。
例如,153是一个水仙花数,因为153=13+53+33
输入

输出
每行输出一个水仙花数。

样例输入 Copy

样例输出 Copy
153
370
371
407

首先得到这个数的每一个位数的数值,在加起来验证是否等于这个数本身

#include<stdio.h>
#include<math.h>
int main()
{int a,b,c,n;for(n=100;n<1000;n++){a=n/100;b=n/10%10;c=n%10;if(pow(a,3)+pow(b,3)+pow(c,3)==n){printf("%d\n",n);}}return 0;
}

1182: 习题5-9 完数

题目描述
一个数如果恰好等于它的因子和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,所以6是“完数”。
编程输出1000以内的所有完数,每个完数输出一行,并按下面的格式输出其因子:
6 its factors are 1,2,3
输入

输出
每个完数输出一行,并按下面的格式输出其因子:
? its factors are ?,?,?

样例输入 Copy

样例输出 Copy
6 its factors are 1,2,3
28 its factors are 1,2,4,7,14
496 its factors are 1,2,4,8,16,31,62,124,248

提示
因子包含1但不包含其本身。

首先是我记得当初这个输出格式把我搞得快疯了,然后这道题,先判断出这个数是否满足有因数之和等于他的条件,如果满足就先吧这个数搞出来,在逐个输出他的因数就好了,然后继续判断下一个数。

#include<stdio.h>
int main()
{int i,j,k;for(i=1;i<1000;i++){int sum=0;for(j=1;j<i;j++){if(i%j==0){sum+=j;}}if(sum==i){printf("%d its factors are ",i );for(k=1;k<i;k++){if(i%k==0){printf("%d",k);if(k<i/2)printf(",");}}printf("\n");}}return 0;
}

1183: 习题5-10 分数序列求和

题目描述
有如下分数序列
在这里插入图片描述
求出次数列的前20项之和。
请将结果的数据类型定义为double类型。
输入

输出
小数点后保留6位小数,末尾输出换行。

样例输入 Copy

样例输出 Copy
32.660261

将分子和分母分开算,数值增加都有规律,再则就是注意for里面的逻辑顺序

#include<stdio.h>
int main()
{int i=2,j=1,a,k;double m,n=0;for(k=0;k<20;k++){a=i;m=i*1.0/j;i=i+j;j=a;n+=m;}printf("%lf\n",n); return 0;
}

1184: 习题5-11 求多次落地弹球高度

题目描述
一个球从100m的高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。
求它从第一次落地时,到第N次落地时,共经过了多少米,第N次反弹多高。
输入
一个正整数N,表示球落地的次数。
输出
length=球第N次落地时所经过了距离
high=球第N次落地反弹的高度
小数点后保留4位小数。
注意:末尾输出换行。

样例输入 Copy
10
样例输出 Copy
length=199.8047
high=0.0977

计算每次的高度和下次到达的高度,再加起来

#include<stdio.h>
int main()
{int n,i;float length=100,high=100;scanf("%d",&n);for(i=0;i<n-1;i++){high=high*1.0/2;length+=high;}high=high*1.0/2;printf("length=%.4f\nhigh=%.4f\n",length,high);return 0;
}

1185: 习题5-12 猴子吃桃问题

题目描述
猴子第1填摘下若干桃子,当即吃了一半,还觉着不过瘾,又多吃了一个。第2天早晨,又将剩下的桃子吃掉一半,又多吃了一个。以后每天早晨都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现就只剩一个桃子了。求第1天共摘了多少个桃子。
输入

输出
一个整数,末尾换行。

样例输入 Copy

样例输出 Copy
1534

逆向分析一下,做个加法,首先是第一天只有一个果子,后面根具规则,每天多一个在两倍,算出十天的,就是总数

#include<stdio.h>
int main()
{int n=1,i,x=0;for(i=0;i<9;i++){n=(n+1)*2;}printf("%d",n);return 0;
}

1186: 习题5-13 迭代法求平方根

题目描述
输入一个非负实数a,用迭代法求平方根
在这里插入图片描述
求平方根的迭代公式为
在这里插入图片描述
要求前后两次求出的x的差的绝对值小于10-5
从键盘输入非负实数a和迭代初值x0,输出满足条件的xn+1
C数学库中有求绝对值的函数fabs.
输入
非负实数a和迭代初值x0(要求double类型)
输出
输入非负实数的平方根,保留6位小数,末尾换行。

样例输入 Copy
10 3
样例输出 Copy
3.162278

数学公式就直接带入变量计算就可以了

#include<stdio.h>
#include<math.h>
int main()
{double a,x0,x1;scanf("%lf %lf",&a,&x0);x1=(x0+a/x0)/2;if(fabs(x1-x0)>=pow(10,-5))//fabs就是一个求绝对值得函数{x0=x1;x1=(x0+a/x0)/2; }printf("%.6lf\n",(x1+a/x1)/2);///用do~while可以直接输出x1return 0;
}

1187: 习题5-14 牛顿迭代法求方程的根

题目描述
用牛顿迭代法求下面方程在输入初值点附近的根:
2x3-4x2+3x-6=0
要求前后两次求出的x的差的绝对值小于10-6
牛顿迭代法公式如下:
将给定给定方程写成f(x)=0的形式,在给定初值x0的情况下,按如下公式迭代计算:
xn+1=xn-f(x)/f’(x)
提示:C语言数学库中有求指数an的函数pow(a, n)以及求x绝对值的函数fabs(x)
浮点型数据请定义为双精度double类型。
输入
双精度浮点型初值x0
输出
x0附件方程的根,小数点后保留6位小数,末尾换行。

样例输入 Copy
3
样例输出 Copy
2.000000

和上面的题道理是一样的,都是将变量带入公式中进行计算,这个牛顿迭代法可以查一下资料,后面有一门数值计算会有许多计算方法,包括后面的二分法求根,可以提前学习

#include<stdio.h>///x(n+1)=x(n)-f(x(n))/f'(x(n))
#include<math.h>
int main()
{double x0,m,n,x1;scanf("%lf",&x0);//s=(2*pow(x0,3)-4*pow(x0,2)+3*x0-6)/(6*pow(x0,2)-8*x0+3);//x1=x0-s;if(fabs(x1-x0)>=pow(10,-6)){x0=x1;m=(2*pow(x0,3)-4*pow(x0,2)+3*x0-6);n=(6*pow(x0,2)-8*x0+3);x1=x0-m/n;}printf("%.6lf\n",x1);return 0;
}

1188: 习题5-15 二分法求方程的根

题目描述
用二分法求下面方程在区间(a,b)之间的根:
2x3-4x2+3x-6=0
区间端点a, b由键盘输入,确保输入区间内有根。
计算至误差小于10-6为止。
程序中,浮点型数据请定义为双精度double类型。
提示:二分法求方程根的步骤如下:
先将方程写成f(x)=0的形式,再按照如下步骤计算:
1.求出给出的两个端点之间的值fx1,fx2.当fx1fx2<0,则表明x1和x2之间必存在一根
要么就不存在,一直提示输出x1和x2.
2.一旦fx1
fx2<0,就表明在x1和x2之间有根,继续判断,求的x1和x2的中点值x0,求出fx0.
3.在判断fx0*fx1>0,则在x0和x2中间去找根,此时x1不起作用,用x0代替x1,用fx0代替fx1.
要么就在x0和x1中去找根,此时x2不起作用,用x0代替x2,用fx0代替fx2.
输入
以空格分隔的区间端点值,确保输入的区间内存在方程的根。
输出
二分法求得的方程根,小数点后保留6位小数,末尾换行。

样例输入 Copy
-10 10
样例输出 Copy
2.000000

原理题目已经说得很清楚了,有点繁杂,仔细审题

#include<stdio.h>
#include<math.h>
double val(double x)
{double y;y=2*pow(x,3)-4*pow(x,2)+3*x-6;return y;
}
int main()
{double a,b,c;scanf("%lf %lf",&a,&b);if(val(a)==0){printf("%lf\n",a);}if(val(b)==0){printf("%lf\n",b);}while(val(a)*val(b)<0){c=(a+b)*1.0/2;if(val(a)*val(c)<0){b=c;}if(val(b)*val(c)<0){a=c;}if(val(c)==0||fabs(a-b)<pow(10,-6)){printf("%lf\n",c);break;}}return 0;
}

1189: 习题6-1 筛选法求素数

题目描述
从键盘上输入一个正整数N(N<=100),用筛选法求N之内的素数
输入
正整数N
输出
0~N之间的素数,每个素数一行

样例输入 Copy
100
样例输出 Copy
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

提示
筛选法求N以内的素数
算法:
(1)挖去1;
(2)用下一个未被挖去的数P去除P后面各数,把P的倍数挖掉;
(3)检查P是否小于N的开方的整数部分,如果是,则返回2继续执行,否则就结束。
(4)剩下的数就是素数。

我承认我懒了,没看程序了,解析无o(´^`)o

#include<stdio.h>
#include<math.h>
int main()
{int n,p,i,x,a[105];scanf("%d",&n);x=sqrt(n);for(p=1;p<=n;p++)a[p]=p;a[1]=0;for(p=2;p<=x;p++){for(i=p+1;i<=n;i++){if(a[p]!=0&&a[i]!=0){if(a[i]%a[p]==0)a[i]=0;}}}for(p=1;p<=n;p++){if(a[p]!=0)printf("%d\n",a[p]);}return 0;
}

这篇关于湖南中医药大学OJ—1180到1189的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204846

相关文章

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

OJ-0905

题目 示例1: 输入:10 10 56 34 99 1 87 8 99 3 255 6 99 5 255 4 99 7 255 2 99 9 255 213 4输出:99 示例2: 输入:10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 213 5输出:255 import java.util.

每日OJ_牛客_Emacs计算器(逆波兰表达式)

目录 牛客_Emacs计算器(逆波兰表达式) 解析代码 牛客_Emacs计算器(逆波兰表达式) Emacs计算器__牛客网 解析代码 逆波兰表达式(后缀表达式)求值,需要借助栈,思路: 循环输入,获取逆波兰表达式,然后进行以下补助,直到测试完所有的测试用例: 遇到数字字符串,将该数字字符串转化为数字然后入栈。遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算

西北工业大学oj题-兔子生崽

题目描述: 兔子生崽问题。假设一对小兔的成熟期是一个月,即一个月可长成成兔,每对成兔每个月可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子? 这道题目一眼看过去就是典型的递归问题,代码如下 public class RabbitReproduction {public static void main(String[] args) {in

★ 算法OJ题 ★ 力扣209 - 长度最小的子数组

Ciallo~(∠・ω< )⌒☆ ~ 今天,简将和大家一起做一道滑动窗口算法题--长度最小的子数组~ 目录 一  题目 二  算法解析 解法⼀:暴力求解 解法二:滑动窗口 三  编写算法 一  题目 209. 长度最小的子数组 - 力扣(LeetCode) 二  算法解析 解法⼀:暴力求解 算法思路: 从前往后枚举数组中的任意⼀个元素,把它当成起始位置

OJ-0903

题目 示例1 输入:30 12 25 8 19输出:15 示例2 输入:10 12 25 8 19 8 6 4 17 19 20 30输出:-1 题解 import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {public static

【负载均衡式在线OJ】Compile_server 模块

文章目录 程序源码compile_server整体思路编译(compile.hpp)运行模块编译运行模块编译运行服务 程序源码 https://gitee.com/not-a-stupid-child/online-judge compile_server 整体思路 这个服务要对oj_server 发送过来的代码进行编译和运行,最后把结果返回给oj_server。 所以我

★ 算法OJ题 ★ 力扣18 - 四数之和

Ciallo~(∠・ω< )⌒☆ ~ 今天,爱丽速子将和大家一起做一道双指针算法题--四数之和~ 目录 一  题目 二  算法解析 三  编写算法  做此题前最好先看一下前两篇博客~: ★ 算法OJ题 ★ 力扣 LCR179 - 和为 s 的两个数字-CSDN博客 ★ 算法OJ题 ★ 力扣15 - 三数之和-CSDN博客 一  题目 18. 四数之和 - 力扣(Lee

oj生成数据

首先先写一个生成test.in的代码,利用随机数生成测试数据。 按照格式生成测试数就行   转载:https://blog.csdn.net/qq_29980371/article/details/72825443 #include <bits/stdc++.h>using namespace std;int main(){freopen("test.in","w",stdout);