zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C/C++每日一练(20230323)

C++ 每日
2023-09-14 09:01:29 时间

目录

1. 素数求和问题  🌟

2. 秒数转换  🌟

3. 硬币重量最轻问题  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


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每日一练 专栏