1.实数求绝对值函数:
#include <math.h>
double fabs( double arg );
功能: 函数返回参数arg的绝对值。
2.可能.nlf n为数字,想要用,后边必须是算式吧
3.今天在c语言里,又偶遇一位新朋友,叫puts(好好查查他)
4.swap 交换两个数#include <algorithm>
5.判断一个日期是一年的多少天。先定义一个宏,来判断是否为闰年
在把两种年,装进一个二维数组中,哈哈,比我写的switch爽好多
6.想要连续输入 while(cin>>number) 或者 while(scanf("%d",&number) != EOF)
第一种适用于只有一个输入值,或者不知道有几个输入值
第二种适用于有确定个数的输入值,直到读取到文件结束
7. (i & 1) ? (y += i*i*i) : (x += i*i); 这个是啥意思???位操作
8.while (scanf("%d", &n) , n) 遇到零,就结束
9.for(s = 0.0; n--; x = sqrt(x)) 素数,简洁版
10.printf(c++ ? " %d" : "%d", a[i]);
我们重复计算的只是这4个数字而已。
因为本题的数据两仅100->999。但万一有一题数据两非常庞大。而结果有像这次一样如此少。我们又该怎么办呢?
像这样的题目,算法很简单就可以实现,但优化也许需要我们花点时间去做,我们可以采用一种快速的“作弊”的方法:直接打表提交!
在比赛的时候,也许没有太多时间让我们去研究一道题目的算法。这样我们在思考其他题目的时间也可以用电脑来自动生成结果。
然后用哈希的思想,对每个输入的数据对应输出结果就可以了。当然,这是最没技术含量,但也是绝路上最有效的一颗救命稻草!
我这里讲这么多只是想让大家了解,应付比赛的着数是很多的。切不要思维定式了。
11. 3 * pow(2, n - 1) - 2);
12.对于某些求和啦,求差啦,等数学计算,学或干干的推出来规律一般都能从中用数
13.我对scanf认识的还是不够哇
Arr[i]=cin>>m;错误
Cin>>m; arr[i]=m;正确
同理
Arr[i]=scanf(“%d”,&m);错误
scanf(“%d”,&m); arr[i]=m;正确
当输入0时,结束;
while (scanf("%d", &n), n)
或者
while (cin>>m && m)
14.n表示测试的组数,c表示持续的向里面添加字符
int n, d;
char c;
scanf("%d%*c", &n);
15. 判断是否为数字,直接调用库函数isdigit();
语法:
#include <ctype.h>
int isdigit( int ch );
功能:如果参数是0到9之间的数字字符,函数返回非零值,否则返回零值.
16.母牛问题:小牛经过四年也能生牛
知道了递推的规律,就可以写出方程了:
f(n) = f(n-1) + f(n-3); (n > 3)
f(n) = n; (n <= 3)
因为这是重复计算的过程。你可以把结果都保存在数组里。
17.程序里的四舍五入
(m+0.5)/1
Int 型转化为double型
s[i] * 1.0 / m
18.
多用库函数,勤用库函数。
isalpha
语法:
#include <ctype.h>
int isalpha( int ch );
功能:如果参数是字母字符,函数返回非零值,否则返回零值。
isalnum
语法:
#include <ctype.h>
int isalnum( int ch );
功能:如果参数是数字或字母字符,函数返回非零值,否则返回零值。
19.对于字符串的操作,有某些条件的字符后面要加一些额外字符,可以逐个输出,符合条件加上额外字符就行了。
| 找到最大值后,只要用putchar()逐个输出,然后判断输出的是不是最大值,是就再输出一个(max),就是这么简单! |
gets 接受输入的字符串
用法:
char t[128];
while( v)
{
for(int i=0;t[i];i++)
{
各种ml条件操作
}
for(int i=0;t[i];i++)
{
putchar( t[i] );
}
}
20.
tolower
语法:
#include <ctype.h> int tolower( int ch );
功能:函数字符ch的小写形式。
toupper
语法:
#include <ctype.h> int toupper( int ch );
功能:函数字符ch的大写形式。
21.while ((c = getchar()) != '\n')
scanf("%d%*c", &n);
22.最小公倍数 = X*Y/最大公约数。
while (scanf("%d", &n) != EOF)
while (n--)
{
scanf("%lu", &u);
}
Eg:3 4 5 6
2 4 3
【数制换算的一般方法】
1 把r进数转换成十进制数,只要把r进制数写成r的各次幂的和的形式。然后按十进制计算结果。(这里r是大于1的自然数)
例如: (205.21)8 = 2 × 82 + 0 × 81 + 5 × 80 + 2 × 8-1 + 1 × 8-2
把十进制换成r进制,可以把十进制化成r的各次幂(各次幂的系数小于r而大于或等于0的整数)的和,从最高次幂起各次幂的系数就是依次的r进制从左到右各个数位上的数字。当十进制数是整数时,采用“r除取余”法。即用数r除十进整数。取它的每次余数。
例如:把(746)10化为一个八进制的数。8|746
----
8|93 --- 2
---
8|11 --- 5
---
8|1 --- 3
--
0 --- 1
得到(746)10 = (1352)8
当十进制是小数时,采用“r乘取整”法,即用数r乘十进制小数,每乘一次取一次整数,直至小数部分变成零为止。
例如:把(0.8125)10化为二进制。
0.|8125
×| 2
-------
1.|6250
×| 2
-------
1.|2500
×| 2
-------
0.|5000
×| 2
-------
1.|0000
得到(0.8125)10 = (0.1101)2
1 把r1进制数转换成r2进制数,一般可以先把r1进制数转换成十进制数,再从十进制数转换成r2进制数。
1
杨辉三角
把杨辉三角压缩进数组中,就会发现它的规律:f(i, i) = f(i, 1) = 1 (i > 0)
f(i, j) = f(i-1, j) + f(i-1, j-1) (j < i)
或者 f(i, j) = Cji
多边形求面积公式:
可以利用多边形求面积公式:
S = 0.5 * ( (x0*y1-x1*y0) + (x1*y2-x2*y1) + ... + (xn*y0-x0*yn) )
其中点(x0, y0), (x1, y1), ... , (xn, yn)为多边形上按逆时针顺序的顶点。
数组巧运算
//用数组来进行,一个存储,另外两个运算
int x[3], y[3], n;
scanf("%d%d", x, y);//默认把元素放到数组的第一个里面即x[0] y[0]
scanf("%d%d", x+1, y+1);//加一就是把元素放到第二个里面了。
递归的调用
题目分析:
由题目可知,每次只能走一级或两级。
因此从第一级走上第二级只能走一步,只有1种走法。
从第一级走上第三级,可以从第一级直接走两步,也可以从第二级走一步。有2种走法
走上第n级,可以从第n-1级走一步上来,也可以从第n-2级走两步上来。
即:
f(2) = 1
f(3) = 2
f(n) = f(n-1) + f(n-2) (n > 3)
int i, j, n;// 这类题,先找出递归的规律
__int64 d[51] = {1, 1, 2,};//把已知的规律放到数组的前两道三位
for (i = 3; i < 51; i++)//51是要求的边界
d[i] = d[i-1] + d[i-2];//这是得到的递归的规律
scanf("%d", &n);
while (n-- && scanf("%d%d", &i, &j) != EOF)
printf("%I64d\n", i > j ? 0 : d[j-i]);//要求输出的条件
概率问题:
这一题比起其他题稍微高级一点,它需要两路同时进行梯推。
我们每次都在原来合法的字符串的最后面再加一个字符,让它仍然是合法的字符串。
这就会出现最后一个字符是O和不是O两种情况,把末尾是O的字符串的个数保存在D[I][0]里,而不是O的保存在D[I][1]里。
在原来的字符串上再加个O,让它依然合法,则原来的字符串末尾必须不为O,即D[n][0] = D[n-1][1]
而在原来的字符串上再加非O,则它对前面字符串的末尾没有要求,而且它还有E、F两种。因此D[n][1] = 2 * (D[n-1][0] + D[n-1][1])
初始D[1][0] = 1; D[1][1] = 2;
都是以前刷题时的感受,希望共同交流