1. 素数求和问题
给定n(n≤100)个正整数,所有正整数均≤1000000;求其中所有素数的和。
例如:
给定序列: 2 3 4 5 6,素数和为:10
给定序列: 3 4 5 6 7, 素数和为:15
给定序列: 12 19 23 35 68 71, 素数和为: 113
输入格式:
输入为两行。第一行是一个正整数n,表示有多少个数据。第二行是n个正整数组成的序列。
输出格式:
输出一个正整数,是上述序列中所有素数之和。
出处:
https://edu.csdn.net/practice/23497452
代码:
#include <stdio.h> int isprime(int n); int main() { int i,n,m,s=0; scanf("%d", &n); for(i=0; i<n; i++) { scanf("%d", &m); if(isprime(m)){ s+=m; } } printf("%d", s); return 0; } int isprime(int n) { int i; if(n<=1) return 0; for(i=2;i*i<=n;i++) if(n%i==0) return 0; return 1; }
输入输出:
5
2 3 4 5 6
10
2. 秒数转换
输入一个秒数,转换成HH:MM:SS的格式输出。
输入样例
365
输出样例
00:06:05
出处:
https://edu.csdn.net/practice/23497453
代码:
#include <cstdio> void print(int x) { if (x == 0) printf("00"); else if (x < 10) printf("0%d", x); else printf("%d", x); return; } int main() { int n; scanf("%d", &n); int s, f, m; s = n / 3600; f = n / 60 % 60; m = n % 60; print(s); printf(":"); print(f); printf(":"); print(m); return 0; }
输入输出:
365
00:06:05
3. 硬币重量最轻问题
设有n种不同面值的硬币,第i种硬币的币值是Vi(其中V1=1),重量是Wi,i=1,2,...n且现在购买某种总币值为y的商品,需要用这些硬币付款,如果每种钱币使用的个数不限,那么如何选择付款的方法使得付出钱币的总重量最轻?使用动态规划设计策略设计一个求解该问题的算法。假设问题的输入实例是:
n=4
V1=1, V2=4, V3=6, V4=8
W1=1, W2=2,W3=4,W4=6
Y=12
要求输出优化函数表和标记函数表、以及硬币支付方式。
出处:
https://edu.csdn.net/practice/23497454
代码:
#include <stdio.h> void strcpy(int *a, int *b, int Y) { for (int i = 0; i <= Y; i++) *(a + i) = *(b + i); } void solve() { int n; scanf("%d", &n); int type[n], weight[n], Y, i, j, k; for (i = 0; i < n; i++) scanf("%d", &type[i]); for (i = 0; i < n; i++) scanf("%d", &weight[i]); scanf("%d", &Y); int Min[Y + 1], Min_Path[Y + 1], path[n][Y + 1]; for (i = 0; i <= Y; i++) Min[i] = 9999; Min[0] = 0; printf("\n"); for (j = 0; j < n; j++) { for (i = type[j]; i <= Y; i++) if (Min[i] > Min[i - type[j]] + weight[j]) { Min_Path[i] = type[j]; Min[i] = Min[i - type[j]] + weight[j]; } for (k = 1; k <= Y; k++) printf("%-3d", Min[k]); printf("\n"); strcpy(path[j], Min_Path, Y); } printf("\n"); for (i = 0; i < n; i++) { for (j = 1; j <= Y; j++) printf("%-3d", path[i][j]); printf("\n"); } int y = Y; printf("\n支付方式:"); while (y) { printf("%d ", Min_Path[y]); y -= Min_Path[y]; } printf("\n总重量:%d\n", Min[Y]); } int main() { solve(); return 1; }
输入输出:
4
1 4 6 8
1 2 4 6
12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 2 3 4 5 4 5 6 7 6
1 2 3 2 3 4 5 4 5 6 7 6
1 2 3 2 3 4 5 4 5 6 7 6
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 4 4 4 4 4 4 4 4 4
1 1 1 4 4 4 4 4 4 4 4 4
1 1 1 4 4 4 4 4 4 4 4 4
支付方式:4 4 4
总重量:6