演算法競賽入門經典(第二版)第二章迴圈結構程式設計註解與習題下
阿新 • • 發佈:2018-11-04
2-4子序列的和
輸入兩個正整數n<m<10^6,輸出1/ n^2+1/ (n+1)^2+……+1/ m^2,保留5位小數。輸入包含多組資料,結束標記為n=m=0.提示:本題有陷阱
本題思路在於乘法溢位的問題
陷阱就是關於int型別的極限,因為Int的上限是2^32-1
#include <stdio.h>
int main()
{
int n,m;
double a;
while(scanf("%d%d",&n,&m)!=EOF&&n&& m)
{
a=0.0;
for(long long i=n;i<=m;i++)//若變為int型別則,會有乘法溢位的問題
{
double b=i*i;
a+=1/b;
}
printf("%.5f\n",a);
}
}
2.5 分數化小數
輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點後c位。a,b<=10^6,c<=100.輸入包含多組資料,結束標記位a=b=c=0
#include<stdio.h>
int main()
{
int a,b;
int c,i;
while(scanf("%d %d%d",&a,&b,&c)!=EOF&&a,b,c)
{
int d[110];//小數點後面數字用陣列表示出來
d[0]=0;
for(i=1;i<=c;i++)
{
int e=a*10/b;
d[i]=e%10;
a=a*10;
}
d[i]='\0';
if(d[i-1] >=5) d[i-1]+=1;
printf("0.");
for(i=1;d[i]!='\0';i++)
{
printf("%d",d[i]);
}
printf("\n");
}
}
2.6 排列
用1,2,3,……9組成3個三位數 abc,def和ghi,每個數字恰好使用一次,要求abc:def:ghi=1:2:3。
按照”abc def ghi”的格式輸出所有解,每行一個解。
思路:1:2:3可以說明假設用一個最小的三位數就可以表示出其他的二個數,然後就是最小的三位數是123,它的最大值是987/3得到329
還有就是判斷是否每個數字只使用了一次
#include <stdio.h>
int main() {
int a,b,c,d,e,f,g,h,i,j,k,l,m,o;
for(int a=123;a<=329;a++)
{
int n=0;
b=a;
c=b/100;
d=b/10%10;
e=b%10;
f=b*2;
g=f/100;
h=f/10%10;
i=f%10;
j=b*3;
k=j/100;
l=j/10%10;
m=j%10;
for(o=1;o<=9;o++)
{
if(c==o)n++;
else if(d==o) n++;
else if(e==o) n++;
else if(g==o) n++;
else if(h==o) n++;
else if(i==o) n++;
else if(m==o) n++;
else if(k==o) n++;
else if(l==o) n++;
}
if(n==9)
printf("%d\t%d\t%d\n",b,f,j);
}
}