丝雨学姐小灶班——Week 3

国庆假期首尾抢刷NOJ 2333

  1. 保留小数位数
    double a,b,c;
    scanf("%lf %lf %lf",&a,&b,&c);
    printf("%.3f\n%.6f",a+b+c,(a+b+c)/3);

定义双精度浮点数;读入双精度浮点数;保留三位小数

  1. 小数处理

取整:将 float 或 duoble 强行转化为 int
向上取整(进一):头文件加 #include <math.h> ,定义double, s=ceil(s);
向下取整(去尾):头文件加 #include <math.h> ,定义double, s=floor(s);
四舍五入到整数:头文件加 #include <math.h> ,定义double, s=round(s);

  1. NOJ 13#

返工修改时大括号的匹配
“\n"等在 if 和 else 中出现的逻辑关系
删除最后一个”+"

        if (sum==n) {
            printf("%d=1",n);
            for (i=2;i<n;i++) {
                if (n%i==0) {
                printf("+%d",i);
                }
            }
            printf("\n");
        }

妙啊

  1. NOJ 15#

别忘了每轮累加都要把计数器和总和重置一次2333
在 22# 中再次碰到类似的情况,用来判断、指示情况的量记得清零重置,千万小心!!!

  1. NOJ 16#

差的绝对值小于10^-5 绝对值 10的n次幂

#include <stdio.h>
#include <math.h>
……
    do {
        m=a;
        a=0.5*(a+a0/a);
    } while (fabs(a-m)>=1e-5);

只是为啥我的土味判断范围法不成呢???

附一个 m 的 n 次方

#include <math.h>
……
pow(m,n)
  1. NOJ 19#

素数求法,顺带学习 sqrt(n)

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i;
	double k;
    scanf("%d", &n);
    k = sqrt(n);
    for (i = 2; i <= k;i++)
	{
        if (n%i == 0) break;
	}
 
    if (i <=k) printf("This is not a prime.");
    else printf("This is a prime");
    return 0;
 
}
  1. NOJ 20#

“一眼看出”的编程实现 利用 if 语句实现题干中的条件筛选

    for(char i ='X';i<='Z';i++){
    for(char j ='X';j<='Z';j++){
        if(i!=j)//这里放一个判断,比赛队员不能重复比赛,判断写在外面又可以减少循环次数
            for(char k = 'X';k<='Z';k++){
                if(i!=k&&j!=k)//同上,排除相同
                    if(i!='X'&&k!='X'&&k!='Z')//这里根据题意排除掉不符合的名单
                        输出;
            }
    }
  1. NOJ 21# 韩信点兵

巧妙报错

    for (n=10;n<=100;n++) {
        if (n%3==a && n%5==b && n%7==c) {
                printf("%d",n);
                break;
        }
    }
    if (n==101) printf("-1");
  1. NOJ 25# 危险的组合

排列组合容斥原理?
讲真,这题让我用排列组合做我也做不出2333
找题解,递归是啥呀,看起来好高级的样子……
https://blog.csdn.net/qq_40152864/article/details/80033994
https://blog.csdn.net/It_BeeCoder/article/details/52863471

假设把n个盒子放成一行,有cnt(n)种方法,可分两方面来考虑:

  1. n个盒子排成一行,如果把第一个盒子拿掉,剩下的n-1个盒子里面满足条件,有cnt(n-1)种,第一个盒子有2种情况:放铀或者铅,因此这种情况共有 2*cnt(n-1) 种。
  2. n个盒子排成一行,如果把第一个盒子拿掉,剩下的n-1个盒子不满足条件,那么只有当前三个盒子是铀,第四个盒子是铅才可以。(注:第四个盒子如果是铀,那么234盒子就满足条件了)。pow(2, n-4)是n-4盒子的所有情况,减去cnt(n-4)后n-4盒子满足条件的(因为本部分讨论的是“如果把第一个盒子拿掉,剩下的n-1个盒子不满足条件”)。

cnt(n)=2*cnt(n-1) +pow(2,n-4)-cnt(n-4);

好吧,函数这块我还没学过emmm,贴个代码将就着边看边学吧

#include <stdio.h>
#include <math.h>
int cnt(int n) {
    if(n<3)
        return 0;
    if(n==3)
        return 1;
    if(n==4)
        return 3;
    if(n>4)
        return 2*cnt(n-1)+(int)pow(2,n-4)-cnt(n-4);
}
int main() {
    int n;
    scanf("%d",&n);
    printf("%d",cnt(n));
    return 0;
}

return 的用法我也不懂……就是把 return 后面的值赋给函数吗?
ε=(´ο`*)))唉

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值