1056 叠木板
题意:你能把一摞卡片放在桌子上有多远?如果你有一张卡,你可以创建一个最大长度的半卡长度。(我们假设卡片必须垂直于桌子。)有两张卡片,你可以使顶端卡片一张卡片长度的一半悬挂,底部卡片以卡片长度的三分之一悬于桌子上,1/2×1/3=5/6卡片长度悬垂。一般来说,你可以让N张卡超过1/2 + 1/3 + 1/4 +…+ 1 /(N+ 1)卡长度,其中顶部卡悬垂第二个1/2,第二个卡伸出第三个卡1/3,第三伸出第四个1/4,等等,底部卡片以1 / (n+1)悬垂。如图:
![](https://i-blog.csdnimg.cn/blog_migrate/63223f69bf0846830acda284617ccbbd.png)
解析:一直1/2 + 1/3 + 1/4 + ... + 1/(n + 1)叠加,直到>m.
#include <iostream>
using namespace std;
int main()
{
double n;
double sum;
int i;
int num;
while(cin >> n,n)
{
sum=0;
num=0;
for(i = 2; sum<n; i++)
{
sum+=1.0/i;
num++;
}
cout << num << " card(s)" << endl;
}
return 0;
}
using namespace std;
int main()
{
double n;
double sum;
int i;
int num;
while(cin >> n,n)
{
sum=0;
num=0;
for(i = 2; sum<n; i++)
{
sum+=1.0/i;
num++;
}
cout << num << " card(s)" << endl;
}
return 0;
}
1060 函数题
题意:求N^N的最左一位
解析:求出n * log(n)的小数部分t,然后(int)10^t就是所要求的结果。
#include <stdio.h>
#include <math.h>
int main()
{
int u;
int ans;
double num,a;
double x;
scanf("%d",&u);
while(u--)
{
scanf("%lf",&num);
x=num*log10(num);
a=pow(10.0,x-(__int64)x);
ans=int(a);
printf("%d\n",ans);
}
return 0;
}
#include <math.h>
int main()
{
int u;
int ans;
double num,a;
double x;
scanf("%d",&u);
while(u--)
{
scanf("%lf",&num);
x=num*log10(num);
a=pow(10.0,x-(__int64)x);
ans=int(a);
printf("%d\n",ans);
}
return 0;
}