C/C++每日一练(20230323)
目录
2. 秒数转换 🌟
3. 硬币重量最轻问题 🌟🌟🌟
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
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
![]() | Golang每日一练 专栏 |
![]() | Python每日一练 专栏 |
![]() | C/C++每日一练 专栏 |
![]() | Java每日一练 专栏 |