ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

有趣的数(动态规划)

2020-04-22 23:07:52  阅读:298  来源: 互联网

标签:include int 几位数 第六种 一位数 有趣 动态 规划


题目:

 一个数称为“有趣”的,当且仅当:

(1)它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。

(2)所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。

(3)最高位数字不为0。

因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。请计算恰好有n位的“有趣”的数的个数。(n<=7)

说明:

大一时的c语言课程设计,红色题目。这题当时想了很久,看了zh的说明和网上很多代码讲解终于在一个晚上明白了。

其实就是输入一个位数,然后对每一位数经行dp,计算出第i位数与前面几位数状态的关系。

大致分为6种状态:

第一种:用了2,剩0,1,3
第二种:用了0,2,剩1,3
第三种:用了2,3,剩1,3
第四种:用了0,1,2,剩3
第五种:用了0,2,3,剩1
第六种:用了0,1,2,3

然后对每位数列出可能存在的状态,每种状态找出与前一位数的关系。

 1 /*
 2 第一种:用了2,剩0,1,3
 3 第二种:用了0,2,剩1,3
 4 第三种:用了2,3,剩1,3
 5 第四种:用了0,1,2,剩3
 6 第五种:用了0,2,3,剩1
 7 第六种:用了0,1,2,3
 8 */
 9 #include <stdio.h>
10 #include <string.h>
11 int main(void)
12 {
13     int n,a[10][6];
14     printf("请输入有几位数:");
15     scanf("%d",&n);
16     memset(a,0,sizeof(a));
17     for(int i=1;i<=n;i++)//6种状态
18     {
19         ///这里所说的第几种状态都是在第i位数的前几位数的状态
20         a[i][0]=1;//都是2,所以这种状态这个位数只能放2
21         a[i][1]=a[i-1][0]+a[i-1][1]*2;//可以用第一种状态+0,所以这个位置可以放一种,也可以用第二种状态+0或者2,所以可以2种
22         a[i][2]=a[i-1][0]+a[i-1][2];//可以用第一种状态+3,所以这个位置可以放一种,也可以用第三种状态+3,因为前面有3了不可以再放2了,所以一种
23         a[i][3]=a[i-1][1]+a[i-1][3]*2;//可以用第二种状态+1,所以这个位置可以放一种,也可以第四种状态+1或者2,所以可以两种
24         a[i][4]=a[i-1][1]+a[i-1][2]+a[i-1][4]*2;//可以第二种状态+3,也可以第三种状态+0,也可以第五种状态+0或者3
25         a[i][5]=a[i-1][3]+a[i-1][4]+a[i-1][5]*2;//可以第四种状态+3,也可以第五种状态+1,也可以第六种状态+1或者3
26     }
27     printf("有趣的数的个数为:%d\n",a[n][5]);
28 }

 

————————————————————————————————————————

As far as carrying the torch for the years to come, I don't know. I just want to be the basketball player I can be.

我不知道需要多长时间才能取得辉煌,我只是想尽我所能去成为最出色的篮球运动员。

——Kobe Bryant

标签:include,int,几位数,第六种,一位数,有趣,动态,规划
来源: https://www.cnblogs.com/zhaohongjie/p/12757551.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有