1, 分苹果,M个苹果分到N个篮子里,篮子可以为空,另外,以下情况为同种分法:3,1,1与1,3,1; 输入:M N,输出可以分的种数。
分析:参考了网上用递归的方法后,运用相同的思路,可以用类似DP的方法做出该题目。
我们用data[j][i]表示篮子为j,苹果为i个时候合乎要求的分苹果方案,则:
<1>初始化:data[1...N][0]=1;data[1][1...M]=1;(简单理解下,当篮子数j为1时,方案数为1;当苹果数目i为0时,方案数为1)
<2>转移:如果i<j,那么,data[j][i]=data[j-1][i];(此时证明篮子数必然有空的,去掉一个也无所谓)
否则,data[j][i]=data[j][j-i] + data[j-1][i](此时,分配方案有两种,一种是篮子都占用了,这一部分的分配方案数目为data[j][i-j];另一种是篮子仍然有空的,所以去掉一个篮子也无所谓,data[j-1][i]);
代码:
#include
#include
int data[1001][1001];
int main()
{
int m, n, i, j;
scanf("%d%d",&m,&n);
memset(data, 0 ,sizeof(data));
for(i = 0;i<=m;i++)data[1][i] = 1;
for(j = 1;j<=n;j++)data[j][0] = 1;
for(j = 2;j<=n;j++)
for(i =1;i<=m;i++)
{
if(i
3.输入汉语拼音的数,如JiuQianJiuBaiJiuShiJiu,注意每个数的拼音 的首字母大写,如“Ling”,”Yi”,”Er”,”San”,”Si”,”Wu”,”Liu”,”Qi”,’’Ba”,”Jiu”,”Shi”,”Bai”,”Qian”,”Wan”,输出阿拉伯数字:9999。
如输入:SanBaiLingSan
输出:303
#include
#include
int tranvert1(char tp[])
{
if(!strcmp(tp, "Yi"))return 1;
else if(!strcmp(tp, "Er"))return 2;
else if(!strcmp(tp, "San"))return 3;
else if(!strcmp(tp, "Si"))return 4;
else if(!strcmp(tp, "Wu"))return 5;
else if(!strcmp(tp, "Liu"))return 6;
else if(!strcmp(tp, "Qi"))return 7;
else if(!strcmp(tp, "Ba"))return 8;
else if(!strcmp(tp, "Jiu"))return 9;
else if(!strcmp(tp, "Ling"))return 0;
}
int tranvert2(char tp[])
{
if(!strcmp(tp, "Wan"))return 10000;
else if(!strcmp(tp, "Qian"))return 1000;
else if(!strcmp(tp, "Bai"))return 100;
else if(!strcmp(tp, "Shi"))return 10;
else return 1;
}
int main()
{
char s[100], tp[10];
int sum=0 ,i = 0, j, len, temp;
gets(s);
while(i < strlen(s))
{
temp = 0;
memset(tp, 0, sizeof(tp) );
j = 0;
tp[j] = s[i];
j++;
i++;
while(s[i] >'Z' && i < strlen(s))
{
tp[j] = s[i];
j++;
i++;
}
temp = tranvert1(tp);
if(!temp)continue;
memset(tp, 0, sizeof(tp));
j = 0;
tp[j] = s[i];
j++;
i++;
while(s[i] >'Z'&& i
3, 输入年月日,输出该日期在一年中的第几天。如
输入:20121231
输出:366
#include
int is_leap(int y)
{
if(!(y%4) &&(y%100))
return 1;
else if(!(y%100)&&!(y%400))
return 1;
else return 2;
}
int main()
{
int leap ,y, m, d, days, i, j, k;
char s[10];
k = 1;
if(k>0.5)
printf("%d\n",k);
gets(s);
y = (s[0]-'0')*1000 + (s[1]-'0')*100 + (s[2]-'0')*10 + (s[3]-'0');
leap = is_leap(y);
printf("%d\n",leap);
m =(s[4] - '0')*10 + (s[5] - '0');
printf("%d\n",m);
d = (s[6]-'0')*10 +(s[7] - '0');
printf("%d\n",d);
if(m ==1)
printf("%d\n",d);
else if(m ==2)
printf("%d\n",31+d);
else if(!(m%2))
{
days = (m/2)*31 +(m -1 -m/2)*30 - leap + d;
printf("%d\n",days);
}
else
{
days =31*(m-1)/2 + 30*(m-1)/2 - leap + d;
printf("%d\n",days);
}
}