手机网站与app苏州网站定制公司哪家好
[编程入门]求和训练
题目描述
求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和
输入格式
a b c
输出格式
1+2+…+a + 12+22+…+b^2 + 1/1+1/2+…+1/c
样例输入
100 50 10
样例输出
47977.93
参考代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 函数声明
double sum_a(double n);
double sum_b(double n);
double sum_c(double n);int main() {double a, b, c;scanf("%lf %lf %lf", &a, &b, &c);double sum_he = sum_a(a) + sum_b(b) + sum_c(c); // 计算总和printf("%.2lf\n", sum_he); // 打印总和return 0;
}// 计算从1到n的自然数之和
double sum_a(double n) {double sum = 0;sum = (n * (n + 1)) / 2;return sum;
}
// 计算从1到n的平方和
double sum_b(double n) {double sum = 0;for (double i = 1; i <= n; i++) {double temp = i * i;sum = sum + temp;}return sum;
}
// 计算从1到n的倒数和
double sum_c(double n) {double sum = 0;for (double i = 1; i <= n; i++) {double temp = 1 / i;sum = sum + temp;}return sum;
}
[编程入门]水仙花数判断
题目描述
打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=13+53+33。
输入格式
无
输出格式
输出每一个水仙花数,一个数占一行
样例输入
无
样例输出
无
参考代码
#define _CRT_SECURE_NO_WARNINGS//分割出每一位数,求立方和,相加跟原数比较
//注意刷新和(res),数组序号i
//参考代码 :#include <stdio.h>
int main() {long x;int a[20];int i, j, k;long res;for (x = 2; x < 1000; x++) {long t = x;i = 0; // 重置 ires = 0; // 重置 res// 将数字分解成各个位并存入数组while (t != 0) {a[i] = t % 10;t = t / 10;i++;}// 计算各位数字的立方和//for (j = i - 1; j >= 0; j--)for (j = 0; j <= i-1; j++) {res += a[j] * a[j] * a[j]; }// 检查是否满足条件if (res == x) {printf("%ld\n", x);}}return 0;
}
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <math.h>int main() {// 遍历所有三位数for (int num = 100; num <= 999; num++) {int hundreds = num / 100; // 获取百位数字int tens = (num / 10) % 10; // 获取十位数字int ones = num % 10; // 获取个位数字// 计算各位数字的立方和int sum = pow(hundreds, 3) + pow(tens, 3) + pow(ones, 3);// 如果立方和等于该数字,输出该数字if (sum == num) {printf("%d\n", num);}}return 0;
}
[编程入门]有规律的数列求和
题目描述
有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前N项之和,保留两位小数。
输入格式
N
输出格式
数列前N项和
样例输入
10
样例输出
16.48
参考代码
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
int main() {int N;double fz = 2.0, fm = 1.0;double an=0.0,sum=0.0;scanf("%d", &N);for (int i = 1; i <= N; i++) { //循环从第二项开始计算an = fz / fm;double temp = fz; //定义临时变量存储分子fz = fz + fm;fm = temp;sum += an;}printf("%.2lf", sum);return 0;
}
[编程入门]自由下落的距离计算
题目描述
一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数
输入格式
M N
输出格式
它在第N次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行
样例输入
1000 5
样例输出
31.25 2875.00
参考代码
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <math.h>int main() {double M; //高度落下int N; //N次落地double q = 0.5; //公比qdouble an,sn;scanf("%lf %d", &M, &N);an = M * pow(q, N );sn = (2*(M * (1 - pow(q, N))) / (1 - q))-M; //计算公式2倍sn减anprintf("%.2lf %.2lf\n", an, sn);return 0;
}
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <math.h>void calc(double M, int N) {double height = M / pow(2, N );// 第 N 次反弹的高度double distance = M; // 初始下落的距离double current_fall = M / 2; // 第一次反弹后下落的距离// 循环计算for (int i = 1; i < N; i++) {distance += 2 * current_fall; // 每次反弹和下落的距离current_fall /= 2; // 下次反弹后的下落高度减半}printf("%.2f %.2f\n", height, distance); // 输出保留两位小数
}
int main() {double M;int N;scanf("%lf %d", &M, &N); // 输入 M 和 Ncalc(M, N); // 计算并输出结果return 0;
}
[编程入门]猴子吃桃的问题
题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入格式
N
输出格式
桃子总数
样例输入
10
样例输出
1534
参考代码
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <math.h>int main() {int N; //天数int num=1;//最后桃子个数scanf("%d", &N);for (int i = 1; i <= N-1; i++) {num = (num + 1) * 2;}printf("%d", num);return 0;
}
[编程入门]筛选N以内的素数
题目描述
用简单素数筛选法求N以内的素数。
输入格式
N
输出格式
2~N的素数
样例输入
100
样例输出
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
参考代码
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <stdbool.h> //bool
#include <math.h>// 判断一个数是否是素数
bool is_prime(int n) {if (n <= 1) {return false; // 0 和 1 不是素数}//for (int i = 2; i * i <= n; i++) { // 只需要判断到 sqrt(n)//只需要判断 n 是否能被从 2 到 √n 范围内的数整除。// 如果 n 能够被某个数 i(2 ≤ i ≤ √n)整除,那么 n 就不是素数;for (int i = 2; i <= sqrt(n); i++) { // 只需要判断到 sqrt(n)if (n % i == 0) {return false; // 如果能被整除,则不是素数}}return true; // 否则是素数
}void print_su(int N) {for (int i = 2; i <= N; i++) {if (is_prime(i)) {printf("%d\n", i); // 输出素数}}printf("\n");
}int main() {int N;// 输入 Nscanf("%d", &N);// 打印 N 以内的素数print_su(N);return 0;
}
[编程入门]选择排序
题目描述
用选择法对10个整数从小到大排序。
输入格式
输入10个无序的数字
输出格式
排序好的10个整数
样例输入
4 85 3 234 45 345 345 122 30 12
样例输出
3
4
12
30
45
85
122
234
345
345
参考代码
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>void selection_sort(int arr[], int n) {int i, j, minIndex, temp;// 遍历整个数组for (i = 0; i < n - 1; i++) {minIndex = i; // 假设当前元素是最小的// 在未排序部分中找到最小元素for (j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j; // 更新最小元素的索引}}// 如果 minIndex 发生变化,则交换最小元素与当前元素if (minIndex != i) {temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}
}void print_array(int arr[], int n) {for (int i = 0; i < n; i++) {printf("%d\n", arr[i]);}printf("\n");
}int main() {int arr[10];int n = 10;for (int i = 0; i < n; i++) { // 输入 10 个整数scanf("%d", &arr[i]);}selection_sort(arr, n); // 使用选择排序进行排序print_array(arr, n); // 输出排序后的数组return 0;
}
[编程入门]最大公约数与最小公倍数
题目描述
输入两个正整数m和n,求其最大公约数和最小公倍数。
输入格式
两个整数
输出格式
最大公约数,最小公倍数
样例输入
5 7
样例输出
1 35
参考代码
#include <stdio.h>// 函数声明
int max(int a, int b);// 求最大公约数的函数实现(使用欧几里得算法)
int min(int m, int n, int max_value);// 求最小公倍数的函数实现int main() {int m, n;scanf("%d %d", &m,&n); // 输入两个正整数int max_value = max(m, n); // 计算最大公约数int min_value = min(m, n, max_value); // 计算最小公倍数printf("%d %d\n", max_value, min_value);return 0;
}int max(int a, int b) {while (b != 0) { // 求最大公约数的函数实现(使用欧几里得算法)int temp = b;b = a % b;a = temp;}return a;
}int min(int m, int n, int max_value) {return (m * n) / max_value; // 求最小公倍数的函数实现
}
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int max_gy(int a, int b){ //计算最大公约数int c=1; //while 循环中要赋值c,切c不能等于0while (c != 0) { c= a % b;a = b;b = c;}return a;
}
int min_gb(int m, int n) {int gb;gb = (m * n) / max_gy(m, n);return gb;
}int main() {int m, n; scanf("%d %d", &m, &n);printf("%d %d", max_gy(m, n), min_gb(m, n));return 0;
}
[编程入门]矩阵对角线求和
题目描述
求一个3×3矩阵对角线元素之和。
输入格式
矩阵
输出格式
主对角线 副对角线 元素和
样例输入
1 2 3
1 1 1
3 2 1
样例输出
3 7
参考代码
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main() {int arr[3][3]; int n = 3;int sum1 = 0, sum2=0; //定义主、副对角线for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) {scanf("%d", &arr[i][j]);}}for (int i = 0; i < n; i++) { sum1 += arr[i][i];sum2 += arr[2 - i][i];}printf("%d %d\n", sum1,sum2);return 0;
}