1、n个相同小球放到m个相同盒子,允许空盒,总共有多少种
直接上代码:
void DP_Caculate(int m,int n)
{
for(int i =0;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(i==1||j==1||i==0)
{
dp[i][j]=1;
}
else if(i>=j)
{
dp[i][j]=dp[i][j-1]+dp[i-j][j]; /*两种情况,将所有的盒子先放一个球,此时有这么多
dp[i-j][j],还有一种情就是允许有空盒出现,即dp[i][j-1]*/
}
else if(i<j)
{
dp[i][j]=dp[i][j-1]; /*球的数量小于盒子的数量时,等同于dp[i][i]*/
/*dp[i][j]=dp[i][i];*/
}
}
}
}
2、求字符串最长连续数字长度问题
直接上代码
int solve()
{
memset(dp,0,sizeof(dp1));
if(str[0] >= '0' && str[0] <= '9')
{
dp1[0]=1;
}
for(int i = 1;i<strlen(str)-1;++i)
{
if(str[i] >= '0' && str[i] <= '9')
{
dp1[i] = dp1[i-1]+1;
}
else
{
dp1[i] = 0;
}
}
int maxdp = 0;
for (int j = 0;j<strlen(str)-1;++j)
{
maxdp = compare(maxdp,dp1[j]);
}
return maxdp;
}
注意C语言字符串的定义:
char *str = "A1233888883gh885ss";
字符串长度获取:strlen(str)
主函数为:
void main()
{
/* int m,n;
printf("请输入m;\n");
scanf("%d",&m);
printf("请输入n;\n");
scanf("%d",&n);
memset(dp,0,sizeof(dp));
DP_Caculate(m,n);
printf("%d,%d,%d\n",m,n,dp[m][n]);
printf("The large number is : %d",compare(m,n));*/
solve();
printf("%d\n",solve());
printf("%d\n",sizeof(str));
printf("%c\n",str[3]);
for (int j = 0;j<strlen(str)-1;++j)
{
printf("%d\n",dp1[j]);
}
}
输出结果为: