国庆假期首尾抢刷NOJ 2333
- 保留小数位数
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);
printf("%.3f\n%.6f",a+b+c,(a+b+c)/3);
定义双精度浮点数;读入双精度浮点数;保留三位小数
- 小数处理
取整:将 float 或 duoble 强行转化为 int
向上取整(进一):头文件加 #include <math.h> ,定义double, s=ceil(s);
向下取整(去尾):头文件加 #include <math.h> ,定义double, s=floor(s);
四舍五入到整数:头文件加 #include <math.h> ,定义double, s=round(s);
- 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");
}
妙啊
- NOJ 15#
别忘了每轮累加都要把计数器和总和重置一次2333
在 22# 中再次碰到类似的情况,用来判断、指示情况的量记得清零重置,千万小心!!!
- 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)
- 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;
}
- 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')//这里根据题意排除掉不符合的名单
输出;
}
}
- 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");
- NOJ 25# 危险的组合
排列组合容斥原理?
讲真,这题让我用排列组合做我也做不出2333
找题解,递归是啥呀,看起来好高级的样子……
https://blog.csdn.net/qq_40152864/article/details/80033994
https://blog.csdn.net/It_BeeCoder/article/details/52863471
假设把n个盒子放成一行,有cnt(n)种方法,可分两方面来考虑:
- n个盒子排成一行,如果把第一个盒子拿掉,剩下的n-1个盒子里面满足条件,有cnt(n-1)种,第一个盒子有2种情况:放铀或者铅,因此这种情况共有 2*cnt(n-1) 种。
- 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 后面的值赋给函数吗?
ε=(´ο`*)))唉