算法竞赛第二章练习




//排序fopen版
#include<stdio.h>
int main()
{
FILE *fin ,*fout;
fin =  fopen("permutation.in" , "rb");
fout = fopen("permutation.out" , "wb");
int a,b,c,d,e,f,g,h,i;
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{
for(c=1;c<=9;c++)
{
for(d=1;d<=9;d++)
{
for(e=1;e<=9;e++)
{
for(f=1;f<=9;f++)
{
for(g=1;g<=9;g++)
{
for(h=1;h<=9;h++)
{
for(i=1;i<=9;i++)
{
if((2*(a*100+b*10+c)==d*100+e*10+f) && (3*(a*100+b*10+c)==g*100+h*10+i) && (a!=b) && (a!=c) && (a!=d) && (a!=e) && (a!=f) && (a!=g) && (a!=h) && (a!=i) && (b!=c) && (b!=d) && (b!=e) && (b!=f) && (b!=g) && (b!=h) && (b!=i) && (c!=d) && (c!=e) && (c!=f) && (c!=g) && (c!=h) && (c!=i) && (d!=e) && (d!=f) && (d!=g) && (d!=h) && (d!=i) && (e!=f) && (e!=g) && (e!=h) && (e!=i) && (f!=g) && (f!=h) && (f!=i) && (g!=h) && (g!=i) && (h!=i))
{
fprintf(fout,"%d,%d,%d\r\n", a*100+b*10+c,d*100+e*10+f,g*100+h*10+i);
}
}
}
}
}
}
}
}
}
}
fclose(fin);
fclose(fout);
return 0;
}



//排列重定向版
#define LOCAL
#include<stdio.h>
int main()
{
#ifdef LOCAL
freopen("permutation.in", "r", stdin);
freopen("permutation.out", "w", stdout);
#endif
int a,b,c,d,e,f,g,h,i;
for(a=1;a<=9;a++)
{
for(b=1;b<=9;b++)
{
for(c=1;c<=9;c++)
{
for(d=1;d<=9;d++)
{
for(e=1;e<=9;e++)
{
for(f=1;f<=9;f++)
{
for(g=1;g<=9;g++)
{
for(h=1;h<=9;h++)
{
for(i=1;i<=9;i++)
{
if((2*(a*100+b*10+c)==d*100+e*10+f) && (3*(a*100+b*10+c)==g*100+h*10+i) && (a!=b) && (a!=c) && (a!=d) && (a!=e) && (a!=f) && (a!=g) && (a!=h) && (a!=i) && (b!=c) && (b!=d) && (b!=e) && (b!=f) && (b!=g) && (b!=h) && (b!=i) && (c!=d) && (c!=e) && (c!=f) && (c!=g) && (c!=h) && (c!=i) && (d!=e) && (d!=f) && (d!=g) && (d!=h) && (d!=i) && (e!=f) && (e!=g) && (e!=h) && (e!=i) && (f!=g) && (f!=h) && (f!=i) && (g!=h) && (g!=i) && (h!=i))
{
printf("%d,%d,%d\n", a*100+b*10+c,d*100+e*10+f,g*100+h*10+i);
}
}
}
}
}
}
}
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}



//分数化小数fopen版
#include<stdio.h>
int main()
{
FILE *fin, *fout;
fin = fopen("decimal.in", "rb");
fout = fopen("decimal.out", "wb");
int i,j,n,m,c,d;
int a[100];
fscanf(fin,"%d%d%d", &n,&m,&c);
j=n%m;
fprintf(fout,"%d.", n/m);
i=0;
while(i<c+1)
{
j=j*10;
a[i++]=j/m;
j=j%m;
}
if(a[i-1]>=5)
a[i-2]+=1;
for(d=0;d<=i-2;d++)
fprintf(fout,"%d",a[d]);
fprintf(fout,"\n");
fclose(fin);
fclose(fout);
return 0;
}



//分数化小数重定向版//典
#define LOCAL
#include<stdio.h>
int main()
{
#ifdef LOCAL
freopen("decimal.in", "r", stdin);
freopen("decimal.out", "w", stdout);
#endif
int i,j,n,m,c,d;
int a[100];
scanf("%d%d%d", &n,&m,&c);
j=n%m;
printf("%d.", n/m);
i=0;
while(i<c+1)
{
j=j*10;
a[i++]=j/m;
j=j%m;
}
if(a[i-1]>=5)
a[i-2]+=1;
for(d=0;d<=i-2;d++)
printf("%d",a[d]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}



//子序列的和fopen版
#include<stdio.h>
#include<math.h>
int main()
{
FILE *fin, *fout;
fin = fopen("subsequence.in", "rb");
fout = fopen("subsequence.out", "wb");
int i,n,m;
double sum=0;
fscanf(fin,"%d%d", &n, &m);
for(i=n; i<=m;i++)
{
//sum+=1.0/(i*i);
//想不到改一下成次方函数就成功了
sum+=pow(i,-2);
}
fprintf(fout,"%.5lf", sum);
fclose(fin);
fclose(fout);
return 0;
}



//子序列的和重定向版
#define LOCAL
#include<stdio.h>
#include<math.h>
int main()
{
#ifdef LOCAL
freopen("subsequence.in" ,"r", stdin);
freopen("subsequence.out" ,"w", stdout);
#endif
int i,n,m;
double sum=0;
scanf("%d%d", &n, &m);
for(i=n; i<=m;i++)
{
//sum+=1.0/(i*i);
//想不到改一下成次方函数就成功了
sum+=pow(i,-2);
}
printf("%.5lf", sum);
fclose(stdin);
fclose(stdout);
return 0;
}



//近似计算fopen版
#include<stdio.h>
#include<math.h>
int main()
{
FILE *fin, *fout;
fin = fopen("approximation.in", "rb");
fout = fopen("approximation.out", "wb");
double pif=0,n=1,m=1;
int i=1;
while((fabs(m))>=0.0000001)
{
pif+=m;
i=-i;
n+=2;
m=i/n;
}
fprintf(fout,"%.6lf\n", pif);
//fclose(fin);
//fclose(fout);
//加fclose出错
return 0;
}



//近似计算重定向版
#define LOCAL
#include<stdio.h>
#include<math.h>
int main()
{
#ifdef LOCAL
freopen("approximation.in", "r", stdin);
freopen("approximation.out", "w", stdout);
#endif
double pif=0,n=1,m=1;
int i=1;
while((fabs(m))>=0.0000001)
{
pif+=m;
i=-i;
n+=2;
m=i/n;
}
printf("%.6lf\n", pif);
fclose(stdin);
fclose(stdout);
return 0;
}



//调和级数fopen版
#include<stdio.h>
int main()
{
FILE *fin, *fout;
fin = fopen("harmony.in", "rb");
fout = fopen("harmony.out", "wb");
int n,i;
double sum=0;
fscanf(fin,"%d", &n);
for(i=1; i<=n; i++)
sum+=1.0/i;
fprintf(fout,"%.3lf\n", sum);
fclose(fin);
fclose(fout);
return 0;
}



//调和级数重定向版
#define LOCAL
#include<stdio.h>
int main()
{
#ifdef LOCAL
freopen("harmony.in", "r", stdin);
freopen("harmony.out", "w", stdout);
#endif
int n,i;
double sum=0;
scanf("%d", &n);
for(i=1; i<=n; i++)
sum+=1.0/i;
printf("%.3lf\n", sum);
fclose(stdin);
fclose(stdout);
return 0;
}



//统计fopen版(出错了,为什么?)
#include<stdio.h>
int main()
{
FILE *fin, *fout;
fin = fopen("stat.in", "rb");
fin = fopen("stat.out", "wb");
int n,m,i,count=0;
fscanf(fin,"%d", &n);
int *a = new int[n];
for(i=0; i<n; i++)
fscanf(fin,"%d",&a[i]);
fscanf(fin,"%d", &m);
for(i=0; i<n; i++)
{
if(a[i]<m)
count++; 
}
fprintf(fout,"%d\n", count);
fclose(fin);
fclose(fout);
return 0;
}



//统计重定向版
#define LOCAL
#include<stdio.h>
int main()
{
#ifdef LOCAL
freopen("stat.in", "r",stdin);
freopen("stat.out", "w",stdout);
#endif
int n,m,i,count=0;
scanf("%d", &n);
int *a = new int[n];
for(i=0; i<n; i++)
scanf("%d",&a[i]);
scanf("%d", &m);
for(i=0; i<n; i++)
{
if(a[i]<m)
count++; 
}
printf("%d\n", count);
fclose(stdin);
fclose(stdout);
return 0;
}



//倒三角形fopen版
#include<stdio.h>
int main()
{
FILE *fin, *fout;
fin = fopen("triangle.in", "rb");
fout = fopen("triangle.out","wb");
int n,i,j,k;
fscanf(fin,"%d",&n);
if(n<=20)
{
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
fprintf(fout,"  ");
for(k=n*2-1;k>i*2;k--)
fprintf(fout,"# ");
fprintf(fout,"\r\n");//ps若不加\r则不行,不能换行,printf输出到屏幕 fprintf输出到文件



}
}
fclose(fin);
fclose(fout);
return 0;
}



//倒三角形重定向版
#define LOCAL
#include<stdio.h>
int main()
{
#ifdef LOCAL
freopen("triangle.in", "r", stdin);
freopen("triangle.out", "w", stdout);
#endif
int n,i,j,k;
scanf("%d",&n);
if(n<=20)
{
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
printf("  ");
for(k=n*2-1;k>i*2;k--)
printf("# ");
printf("\n");

}
}
fclose(stdin);
fclose(stdout);
return 0;
}



//韩信点兵fopen版
#include<stdio.h>
int main()
{
FILE *fin , *fout;
fin = fopen("hanxin.in", "rb");
fout = fopen("hanxin.out", "wb");
int a,b,c,i;
fscanf(fin,"%d%d%d", &a, &b, &c);
for(i=10;i<100;i++)
{
if(i%3==a && i%5==b && i%7==c)
fprintf(fout,"%d\n",i); 
}
fclose(fin);
fclose(fout);
return 0;
}



//韩信点兵重定向版
#define LOCAL
#include<stdio.h>
int main()
{


#ifdef LOCAL
freopen("hanxin.in", "r", stdin);
freopen("hanxin.out", "w", stdout);
#endif
int a,b,c,i;
scanf("%d%d%d", &a, &b, &c);
for(i=10;i<100;i++)
{
if(i%3==a && i%5==b && i%7==c)
printf("%d\n",i); 
}
fclose(stdin);
fclose(stdout);
return 0;
}



//水仙花数fopen版
#include<stdio.h>
int main()
{
FILE *fin, *fout;
fin = fopen("daffodil.in", "rb");
fout = fopen("daffodil.out", "wb");
int i,a,b,c,n;
for(i=100 ; i<=999 ;i++)
{
a=i/100;
b=i/10-a*10;
c=i-a*100-b*10;
n=a*a*a+b*b*b+c*c*c;
if(n==i)
fprintf(fout,"%d \n",i);
}
//fclose(fin);
//fclose(fout);
//加了fclose运行时会出错
return 0;
}



//水仙花数重定向版
#define LOCAL
#include<stdio.h>
int main()
{
#ifdef LOCAL
freopen("daffodil.in", "r", stdin);
freopen("daffodil.out", "w", stdout);
#endif
int i,j,k,m;
for(i=1; i<=9; i++)
{
for(j=0; j<=9; j++)
{
for(k=0; k<=9; k++)
{ m=i*100+j*10+k;
if(m==i*i*i+j*j*j+k*k*k)
printf("%d\n",m);
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}



//位数另一个版本
#include<fstream>
using namespace std;
ifstream fin("in.txt");
ofstream fout("out.txt");
int main()
{
int n,count;
while(fin>>n)
{
count=0;
while(n!=0)
{
n/=10;
count++;
}
fout<<count<<endl;
}
return 0;
}



//位数fopen版
#include<stdio.h>
int main()
{
FILE *fin, *fout;
fin = fopen("in.txt", "rb");
fout = fopen("out.txt", "wb");
int n,count;
while(fscanf(fin,"%d", &n)!=EOF)
{
count=0;
while(n!=0)
{
n/=10;
count++;
}
fprintf(fout,"%d\n",count);
}
fclose(fin);
fclose(fout);
return 0;
}



//位数重定向版
#define LOCAL
#include<stdio.h>
 int main()
 {
 
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int n,count;
while(scanf("%d", &n)!=EOF)
{
count=0;
while(n!=0)
{
n/=10;
count++;
}
printf("%d\n",count);
}
fclose(stdin);
fclose(stdout);
return 0;
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值