20181230算法竞赛入门经典1语言篇

第二章 :上机练习
习题2-1 位数digit
重定向版:
#define LOCAL
#include
#include
#include
using namespace std;
int main()
{
#ifdef LOCAL
freopen(“digit.in”,“r”,stdin);
freopen(“digit.out”,“w”,stdout);
#endif // LOCAL
int n,cnt=1;
scanf("%d",&n);
while(n/10)
{
cnt++;
n/=10;
}
printf(“位数:%d\n”,cnt);
}
fopen版
#include<stdio.h>
int main()
{
FILE *fin,*fout;
fin=fopen(“digit.in”,“rb”);
fout=fopen(“digit.out”,“wb”);

int n,cnt=1;
fscanf(fin,"%d",&n);
while(n/10)
{
    cnt++;
    n/=10;
}
fprintf(fout,"位数:%d\n",cnt);
fclose(fin);
fclose(fout);
return 0;

}

习题2-2 水仙花数daffodil
重定向版:
#define LOCAL
#include
#include
#include
#include
using namespace std;
int main()
{
#ifdef LOCAL
freopen(“daffodil.in”,“r”,stdin);
freopen(“daffodil.out”,“w”,stdout);
#endif // LOCAL
int a=0,b=0,c=0;
for(int i=100;i<=999;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==(pow(a,3)+pow(b,3)+pow(c,3)))
{
printf("%d “,i);
}
}
printf(”\n");
}
fopen版

#include
#include
#include
#include
#include
using namespace std;
int main()
{
FILE *fout;
fout=fopen(“daffodil.out”,“wb”);

int a=0,b=0,c=0;
for(int i=100;i<=999;i++)
{
    a=i%10;
    b=i/10%10;
    c=i/100;
    if(i==(pow(a,3)+pow(b,3)+pow(c,3)))
    {
        fprintf(fout,"%d ",i);
    }
}
fprintf(fout,"\r\n");
fclose(fout);

}
习题2-3 韩信点兵hanxin
重定向版:
#define LOCAL
#include
#include
#include
using namespace std;
int a,b,c;
int main()
{
#ifdef LOCAL
freopen(“hanxin.in”,“r”,stdin);
freopen(“hanxin.out”,“w”,stdout);
#endif // LOCAL
while(scanf("%d%d%d",&a,&b,&c)3)
{
bool flag=false;
int num;
for(int i=10;i<=100;i++)
{
if(i%3
a&&i%5b&&i%7c)
{
flag=true;
num=i;
break;
}
}
if(flag==true)
{
printf("%d\n",num);
}
else
{
printf(“No answer\n”);
}
}
}
fopen版

#include
#include
#include<stdio.h>
using namespace std;
int main()
{
FILE *fin,*fout;
fin=fopen(“hanxin.in”,“rb”);
fout=fopen(“hanxin.out”,“wb”);
int a,b,c;
while(fscanf(fin,"%d%d%d",&a,&b,&c)3)
{
bool flag=false;
int num;
for(int i=10;i<=100;i++)
{
if(i%3
a&&i%5b&&i%7c)
{
flag=true;
num=i;
break;
}
}
if(flag==true)
{
fprintf(fout,"%d\r\n",num);
}
else
{
fprintf(fout,“No answer\r\n”);
}
}
fclose(fin);
fclose(fout);
return 0;
}
习题2-3倒三角形triangle
重定向版
#define LOCAL
#include
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main()
{
#ifdef LOCAL
freopen(“triangle.in”,“r”,stdin);
freopen(“triangle.out”,“w”,stdout);
#endif // LOCAL
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
printf(" “);
}
for(int j=1;j<=(n-i+1)*2-1;j++)
{
printf(”#");
}
printf("\n");
}
fopen 版
#include
#include<stdlib.h>
#include
#include<stdio.h>
using namespace std;
int main()
{
FILE *fin,*fout;
fin=fopen(“triangle.in”,“rb”);
fout=fopen(“triangle.out”,“wb”);
int n;
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
fprintf(fout," “);
}
for(int j=1;j<=(n-i+1)*2-1;j++)
{
fprintf(fout,”#");
}
fprintf(fout,"\r\n");
}
}
习题2-5 统计 (start)
选择fopen,因为fopen可以反复打开并读写文件。
#include<stdio.h>
#include<stdlib.h>
#include
int main()
{
FILE *fin,*fout;
fin=fopen(“stat.in”,“rb”);
fout=fopen(“stat.out”,“wb”);

int n,a[10000];
fscanf(fin,"%d",&n);
for(int i=0;i<n;i++)
{
    fscanf(fin,"%d",&a[i]);
}
int m;
fscanf(fin,"%d",&m);
int cnt=0;
for(int i=0;i<n;i++)
{
    if(a[i]<m)
    {
        cnt++;
    }
}
fprintf(fout,"%d\r\n",cnt);
fclose(fin);
fclose(fout);

}
习题2-6 调和级数(harmony)
#define LOCAL
#include<stdio.h>
#include<stdlib.h>
#include
using namespace std;
int main()
{
#ifdef LOCAL
freopen(“harmony.in”,“r”,stdin);
freopen(“harmony.out”,“w”,stdout);
#endif // LOCAL
int n;
scanf("%d",&n);
double res=0;
for(int i=1;i<=n;i++)
{
res+=1.0/i;
}
printf("%.3lf\n",res);
return 0;
习题2-7 近似计算 approximation
#define LOCAL
#include<stdio.h>
#include<stdlib.h>
#include
#include
using namespace std;
int main()
{
#ifdef LOCAL
freopen(“approximation.in”,“r”,stdin);
freopen(“aproximation.out”,“w”,stdout);
#endif // LOCAL
int i=1,sign=-1;
double res=1;
do
{
res+=1.0/(2i+1)sign;
i++;
sign=-sign;
}while(fabs(1.0/(2
i+1))>=10e-6);
printf("%lf\n",4
res);
return 0;
}
习题2-8子序列的和 subsequence

#define LOCAL
#include<stdio.h>
#include<stdlib.h>
#include
#include
using namespace std;
int main()
{
#ifdef LOCAL
freopen(“subsequence.in”,“r”,stdin);
freopen(“subsequence.out”,“w”,stdout);
#endif // LOCAL
int n,m,i;
double res=0;
scanf("%d%d",&n,&m);
for(int i=n;i<=m;i++)
res+=1.0/((long long)i*i;
printf("%.5lf\n",res);
return 0;
}
习题2-9 分数化小数 decimal

#define LOCAL
#include<stdio.h>
#include<stdlib.h>
#include
#include
using namespace std;
int main()
{
#ifdef LOCAL
freopen(“decimal.in”,“r”,stdin);
freopen(“decimal.out”,“w”,stdout);
#endif // LOCAL
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision©;
cout<<(double)a/(double)b;
return 0;
习题2-10 排列 permutation

#define LOCAL
#include<stdio.h>
#include<stdlib.h>
#include
#include
using namespace std;
//用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。

#include <stdio.h>

void result(int num, int &result_add, int &result_mul)
{
int i, j, k;

i = num / 100;        //百位
j = num / 10 % 10;    //十位
k = num % 10;         //个位

result_add += i + j + k;    //分解出来的位数相加
result_mul *= i * j * k;    //相乘

}

int main()
{
#ifdef LOCAL
// freopen(“permutation.in”,“r”,stdin);
freopen(“permutation.out”,“w”,stdout);
#endif // LOCAL
int i, j, k;
int result_add, result_mul;
for(i = 123; i <=329; i++)
{
j = i * 2;
k = i * 3;
result_add = 0;
result_mul = 1;
result(i, result_add, result_mul);
result(j, result_add, result_mul);
result(k, result_add, result_mul);
if(result_add == 45 && result_mul == 362880)
printf("%d %d %d\n", i, j, k);
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值