栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-03

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-03

算法竞赛入门经典_学习记录(1) 学习目标: 学习书籍《算法竞赛入门经典(第二版)》刘汝佳著
学习内容: 算法入门

1、 鸡兔同笼问题

#include 
#include 
#include 
int main()
{
    //鸡兔同笼
    int a, b, n, m;
    scanf("%d%d", &n, &m);
    //m为偶数,a必为整数
    a = (4*n-m)/2;
    b = n-a;
    if(m%2==1||a<0||b<0)
        printf("no answern");
    else
        printf("%d %d",a,b);
    return 0;
}

2、三数排序

#include 
#include 

int main()
{
    //三整数排序
    int a, b, c, t;
    scanf("%d%d%d", &a, &b, &c);
    if(a>b){
        t = a;
        a = b;
        b = t;
    }
    if(a>c){
        t = a;
        a = c;
        c = t;
    }
    if(b>c){
        t = b;
        b = c;
        c = t;
    }
    printf("%d %d %d", a, b, c);
    return 0;
}

3、输入三角形3条边的长度(均为正整数),判断能否称为三角形的三个边长。如果可以,判断是否为直角三角形

#include 
int main(void)
{
    //输入三角形3条边的长度(均为正整数),判断能否称为三角形的三个边长
    //如果可以,判断是否为直角三角形
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if((a+b>c)&&(a+c>b)&&(b+c>a))
    {
        //C语言没有乘方符号,但有乘方函数
        //^的意思是二进制按位异或
        if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
        {
            printf("yes");
        }
        else
        {
            printf("no");
        }
    }
    else
    {
        printf("not a triangle");
    }
    return 0;
}

4、 闰年判断

#include
int main(void)
{
    //闰年判断
    int year;
    scanf("%d",&year);
    if((year%4!=0)||((year%100==0)&&(year%400!=0)))
    {
        printf("no");
    }
    else
    {
        printf("yes");
    }
    return 0;
}

5、 关于数据类型的问题
(1)int 占4个字节,32位。最大值231-1,最小值-231
(2)double型浮点数能精确到多少位小数?或者,这个问题本身值得商榷?

既然double是浮点数,它的小数点的位置是“浮动”的,所以很难说double类型能精确到小数点后面几位。通常这个关于精度的问题都是通过它能表示的有效数字(十进制)的位数来表示的。遵循IEEE标准的8字节(64位)的double能表示的有效数字的位数是:15 ~ 16。
参考链接:https://blog.csdn.net/weixin_42499332/article/details/114166781.
6、7744问题

#include
int  main()
{
   //完全平方数:若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。
   //7744问题,枚举平方根避开平方操作
  for(int x = 1;;x++){
   int n = x*x;
   if(n<1000) continue;
   if(n>9999) break;
   int hi = n / 100;
   int lo = n%100;
   if((hi/10==hi%10)&&(lo/10==lo%10)){
       printf("%d ",n);
   }
  }
   return 0;
}

7、 3n+1问题

#include
int  main()
{
    //3n+1问题
    //未避免输入输出格式符不同意,先将值读入int变量,再赋给long long 类型变量。
    int n2, count = 0;
    scanf("%d", &n2);
    long long n = n2;
    while(n>1)
    {
        if(n%2==1)
        {
            n = n*3+1;
        }
        else
        {
            n /= 2;
        }
        count++;
    }
    printf("%dn",count);
    return 0;
}

8、 阶乘之和

#include
#include
int  main()
{
    //阶乘之和
    const int MOD = 1000000;
    int n, S = 0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int fa = 1;
        for(int j=1;j<=i;j++){
            fa = (fa*j)%MOD;
        }
        S = (S+fa)%MOD;
    }
    printf("%dn", S);
    printf("Time used = %.2fn",(double)clock()/CLOCKS_PER_SEC);

    return 0;
}

9、利用输入输出重定向,将程序的输入和输出保存到文件中。

	freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

10、 数据统计

#include
#include
#define LOCAL
#define INF 1000000000
int  main()
{
    //数据统计(重定向版)
    #ifdef LOCAL
    freopen("data.in","r",stdin);
    freopen("data.out","w", stdout);
    #endif // LOCAL
    int x, n = 0, min = INF, max = -INF, s = 0;
    while(scanf("%d", &x)==1){
        s += x;
        if(xmax) max = x;
        
        n++;
    }
    printf("%d %d %.3fn", min, max, (double)s/n);
    return 0;
}

11、 水仙花数

#include
int  main()
{
    //水仙花数
    for(int i=100;i<=999;i++){
        int n = i;
        int s = 0;
        while(n!=0){
            int m = n%10;
            s += m*m*m;
            n /= 10;
        }
        if(s==i) printf("%dn",i);
    }
    return 0;
}

12、 韩信点兵

#include
int  main()
{
    //韩信点兵
    int a, b, c;
    scanf("%d%d%d",&a, &b, &c);
    for(int i=10;i<100;i++){
        if((i%3==a)&&(i%5==b)&&(i%7==c)){
            printf("%dn",i);
            return 0;
        }
    }
    printf("no answer");
    return 0;
}

13、倒三角形

#include
int  main()
{
   //倒三角形
   int n;
   scanf("%d", &n);
   int a = 2*n-1;
   int b = 0;
   for(int i=0;i 

14、子序列的和
输入两个正整数n<m<10 6 ,输出 ,保留5位小数。输入包含多组数据,
结束标记为n=m=0。提示:本题有陷阱。
####样例输入:
2 4
65536 655360
0 0
####样例输出:
Case 1: 0.42361
Case 2: 0.00001

注:陷阱就是在n特别大时如果直接n*n就会溢出,所以只能连除两次

#include
int  main()
{
    //子序列的和
    int n,m;
    while(1){
        scanf("%d%d",&n,&m);
        if((n==0)&&(m==0)){
            break;
        }
        double s = 0;
        for(int i=n;i<=m;i++){
            s += 1.0f/i/i;
        }
        printf("%.5fn",s);
    }
    return 0;
}

15、分数化小数:

#include
int  main()
{
    //分数化小数
    int a,b,c,cnt=0;
    while(1){
        scanf("%d%d%d",&a,&b,&c);
        if(a+b+c==0) break;
        printf("Case %d: %.*lfn",++cnt,c,a*1.0/b);//保留变量小数位数,用*
    }
    return 0;
}

16、排列

#include
#include
int main()
{
	int abc,def,ghi,sum=0,i;
	int s[10];
	for(abc=123;abc<=329;abc++)//最小a的三位数范围,987/3=329
	{
		memset(s, 0, sizeof(s));//memest函数可以对数组,指针进行初始化非常方便
		def=abc*2;
		ghi=abc*3;
		s[abc/100]=s[abc/10%10]=s[abc%10]=1;
		s[def/100]=s[def/10%10]=s[def%10]=1;
		s[ghi/100]=s[ghi/10%10]=s[ghi%10]=1;
		for(i=1;i<=9;i++)
		{
			sum=sum+s[i];
		}
		if(sum==9)
		{
			printf("%d %d %dn",abc,def,ghi);
		}
		sum=0;//再次进行循环时,要记得对sum和s数组进行初始化
		memset(s, 0, sizeof(s));
	}
	return 0;
}

17、关灯问题

#include
#include
#define maxn 1010
int a[maxn];
int main()
{
	//开灯问题  n盏灯,k个人
	int n, k, first = 1;
	memset(a, 0, sizeof(a));
	scanf("%d%d", &n, &k);
	for(int i=1;i<=k;i++){
        for(int j=1;j<=n;j++){
            if(j%i==0){
                a[j] = !a[j];
            }
        }
	}
	for(int i=1;i<=n;i++){
        if(a[i]){
            if(first)
                first=0;
            else
                printf(" ");
            printf("%d",i);
        }
	}
	printf("n");
	return 0;
}

18、蛇形填数

#include
#include
#define maxn 20
int a[maxn][maxn];
int main()
{
	//蛇形填数
	int n, x, y, tot = 0;
	scanf("%d",&n);
	memset(a,0,sizeof(a));
	tot = a[x=0][y=n-1] = 1;
	while(tot=0 && !a[x][y-1]) a[x][--y] = ++tot;
        while((x-1)>=0&& !a[x-1][y]) a[--x][y] = ++tot;
        while((y+1)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号