蓝盾砝码c语言,蓝盾砝码c语言是什么

本文目录一览:

C语言 砝码称重问题,高手进~~~~

这是一道简单的动态规划题目.

它的做法是:

先只用第一种砝码,看它能构成多少种重量,

再用前2种,看能构成多少种重量(不包括上面的那个)

接着前3种..

前4钟…

前5种…

前6种…

所以有第一个for 循环

for ( i = 0; i 6; i++ )

第2个for循环是表示第i种砝码用多少个情况.

for ( j = 0; j a[ i ]; j++ )

从0(不用)的情况到a[i]种.

事实上这里的终止条件应该为j=a[i];因为可以用a[i]个第i种砝码.

第3个循环是从1000开始,看哪个数字是能够构成的.

f[ k – m[ i ] ] 表示大小为k-m[i]的重量是可以构成的,所以k-m[i]+m[i]即k也是可以构成的.

此时在判断f[k].如果!f[k]成立,表示k为统计.则total++;

for ( k = 1000; k = m[ i ]; k– )

这是一道典型的简单的动态规划题目.

是算法的一类题目.

建议先去学习一些动态规划的知识再学习这个

C语言砝码称重

#includestdio.h

struct fama

{

int weight; int num;

}fama1[10];

int count(struct fama a[10],int k,int n)

{

int temp=0,m=0,p;

int w[10000]={0};

for(int i=k;in;i++)

{

for(int j=0;ja[i].num;j++)

{

p=1; temp+=a[i].weight;

for(int x=0;xm;x++)

{

if(temp==w[x])

p=0;

}

if(p) { w[m]=temp; m++; }

}

} return m; }

void main()

{ int n=0;

scanf(“%d”,n);

for(int i=0;in;i++)

scanf(“%d%d”,fama1[i].weight,fama1[i].num);

int maxnum=0;

for(i=0;in;i++)

maxnum+=count(fama1,i,n);

printf(“%d\n”,maxnum);

}

给分吧,速度

C语言砝码称重问题

这个题目粗看上去似乎不难,但是真写似乎有点难度,代码贴上,

#includestdio.h

#includestdlib.h

#includestring.h

#includememory.h

/*a数组用于存储从n个整型数

 * 据中取k个数字的数组下标值

 * */

int a[100]={0};

/*data数组用于存储实际的数据,也就是所有砝码的

 * 重量

 * */

 int data[4]={2,2,3,3};

 /*sum数组用于保存再data中取k个树的和,注意

  * 没有唯一化处理,也就是说可能里面存在重复

  * 唯一化处理使用函数unique;

  * */

 int sum[100] = {0};

 /*index_sum用于记录sum中最后一个数据的索引值

  * */

 int index_sum = 0;

 /*这是一个递归实现,用于获取从[start,length-num]的

  * 某一位数,这个位数对应了data数组的下标,num是从

  * data中取几位数的,fujia是一个附加参数,用于记录当

  * 前获取了几位树,从而方便操作数组a

  * */

void GetNumberNew(int start, int length, int num, int fujia);

/*统计长度为length的sum数组中不重复元素的个数

 * */

int unique(int[], int length);

int main()

{

   //data数组长度

    int length = 4;

    

    for(int y = 1; y = length; y++)

    {

        /*从[0,num]中获取y个数*/

        GetNumberNew(0, length, y, y);

    }

   

    printf(“%d”,unique(sum, index_sum));

   

    return 0;

}

void GetNumberNew(int start, int length, int num, int fujia)

{

        for(int i = start; i = length – num; i++)

        {

            if (num  0)

            {

            a[num – 1] = i;

            /*从[i+1,length]中获取num-1数

             * */

            GetNumberNew(i +1, length, num-1, fujia);

            }

            else

            {

               for(int x = 0; x  fujia; x++)

               {

                    sum[index_sum] += data[a[x]]; 

                }

                index_sum++;

                return;

                }

            }

}

int unique(int sum[], int length)

{

    int temp = index_sum;

   // printf(“temp:%d “,temp);

        for(int i = 0 ; i  length – 1; i++)

        {

                for(int j = i + 1; j  length; j++)

                {

                        if(sum[i] == sum[j])

                        {

                            /*若有相同的数字则减1,并退出此次循环*/

                            temp–;

                            break;

                            }

                }

        }

        return temp;

}

C语言中的砝码称重问题

1、以f(k):几种砝码组合能称出k的重量为状态DP全部n个砝码,然后枚举去掉的m个砝码的组合,对每种组合再DP一次,从f中减掉,剩下的就是能称出的不同重量,复杂度O(n * C(n, m) * m  * max(a))≤38760000。

2、例程:

#includestdio.h

#includestdlib.h

#includestring.h

#includememory.h

/*a数组用于存储从n个整型数

 * 据中取k个数字的数组下标值

 * */

int a[100]={0};

/*data数组用于存储实际的数据,也就是所有砝码的

 * 重量

 * */

 int data[4]={2,2,3,3};

 /*sum数组用于保存再data中取k个树的和,注意

  * 没有唯一化处理,也就是说可能里面存在重复

  * 唯一化处理使用函数unique;

  * */

 int sum[100] = {0};

 /*index_sum用于记录sum中最后一个数据的索引值

  * */

 int index_sum = 0;

 /*这是一个递归实现,用于获取从[start,length-num]的

  * 某一位数,这个位数对应了data数组的下标,num是从

  * data中取几位数的,fujia是一个附加参数,用于记录当

  * 前获取了几位树,从而方便操作数组a

  * */

void GetNumberNew(int start, int length, int num, int fujia);

/*统计长度为length的sum数组中不重复元素的个数

 * */

int unique(int[], int length);

int main()

{

   //data数组长度

    int length = 4;

    

    for(int y = 1; y = length; y++)

    {

        /*从[0,num]中获取y个数*/

        GetNumberNew(0, length, y, y);

    }

   

    printf(“%d”,unique(sum, index_sum));

   

    return 0;

}

void GetNumberNew(int start, int length, int num, int fujia)

{

        for(int i = start; i = length – num; i++)

        {

            if (num  0)

            {

            a[num – 1] = i;

            /*从[i+1,length]中获取num-1数

             * */

            GetNumberNew(i +1, length, num-1, fujia);

            }

            else

            {

               for(int x = 0; x  fujia; x++)

               {

                    sum[index_sum] += data[a[x]]; 

                }

                index_sum++;

                return;

                }

            }

}

int unique(int sum[], int length)

{

    int temp = index_sum;

   // printf(“temp:%d “,temp);

        for(int i = 0 ; i  length – 1; i++)

        {

                for(int j = i + 1; j  length; j++)

                {

                        if(sum[i] == sum[j])

                        {

                            /*若有相同的数字则减1,并退出此次循环*/

                            temp–;

                            break;

                            }

                }

        }

        return temp;

}

原创文章,作者:OEZC,如若转载,请注明出处:https://www.506064.com/n/141134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
OEZCOEZC
上一篇 2024-10-04 00:24
下一篇 2024-10-04 00:24

相关推荐

  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28
  • Python作为中心语言,在编程中取代C语言的优势和挑战

    Python一直以其简单易懂的语法和高效的编码环境而著名。然而,它最近的发展趋势表明Python的使用范围已经从脚本语言扩展到了从Web应用到机器学习等广泛的开发领域。与此同时,C…

    编程 2025-04-28
  • Python基础语言

    Python作为一种高级编程语言拥有简洁优雅的语法。在本文中,我们将从多个方面探究Python基础语言的特点以及使用技巧。 一、数据类型 Python基础数据类型包括整数、浮点数、…

    编程 2025-04-28

发表回复

登录后才能评论