题目链接:http://poj.org/problem?id=1003 点击打开链接
长度在1/2以下就只有一张卡片,长度在1/2以上从1/2开始循环从总长度中减掉卡片的长度,同步更新总长度和用掉的卡片数量(每减掉一个卡片长度,分母加一),直至剩下的总长度小于下一张可放卡片的长度,代码如下:
#include<stdio.h>
void main()
{
float a[100],n,j;
int i=0,m=0,sum[100]={0};
do{
scanf("%f",&j);
a[i++]=j;
}while(j);
m=i-1;
for(i=0;i<m;i++)
{
n=2;
if(a[i]<=0.5)
{
sum[i]=1;
continue;
}
else
{
while(a[i]>1/n)
{
a[i]-=1/(n++);
sum[i]++;
}
sum[i]++;
}
}
for(i=0;i<m;i++)
printf("%d card(s)\n",sum[i]);
}