1.实数,整型一定要记得区分
a=1/b
a=1.0/b
二者一个是0一个是小数(实数);
当结果输出的是小数时,一定要记得将数据化为实型!
2.如何逐个输入二维数组
题目描述
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
所以在设计程序1/n过程中,要记得1.0/n,否则程序错误!!!!!!
for(b=1;b<6;b++)
{for(c=1;c<6;c++)
scanf("%d",&a[b][c]);}
3.十进制--->二进制。
运用函数递归;
long long f(int a) {
if(a<2)return a;
return f(a/2)*10+a%2;
}
4.swap函数,交换值
swap函数变量的数据类型必须相同。
5.M x N矩阵的正方形,矩形,长方形的个数
小学奥数白学了.....
正方形个数:
边长为1 个数n*m
边长为2 个数(n-1)*(m-1)
边长为3 个数(n-2)*(m-2)
所以 边长为min{n,m} 个数(m-min{n,m}+1)*(n-min{n,m}+1)
长方形加正方形个数(矩形的个数):
total=(1+2+3+…+n)*(1+2+3+…+m)
=((1+n)*(1+m)*n*m)/4
长方形个数(不包括正方形的话)(正方形是特殊的长方形)
上面两式相减即可得出。
代码如下:
#include<iostream>
using namespace std;
long long n,m,a,b,c,d;
int main()
{
cin>>n>>m;
a=m;b=n;c=m*n;
while(a!=0&&b!=0){
a--;b--;c+=a*b;
}
d=(m+1)*(n+1)*m*n/4-c;
cout<<c<<" "<<d;
}
6.输出各个数位之和,如果是个位数,输出,如果不是,继续数位和,直到结果是个位数为止。
若不考虑递归循环做法。
int f(int n)
if(n<9)return n;
int sum=0;
while(n!=0){
n=n%10;
sum+=n;
n=n/10;
}
return f(sum);
简便算法:sum=(n-1)%9+1(推导看教程)
7.时间题基本小套路
跟小时分钟秒有关的题,要想到全部转换成秒数的思路
小时*3600 分钟*60
ACM竞赛中,当遇到有两个队伍(人) 解出相同的题目数量的时候,我们需要通过他们解决问题的总时间进行排序。
一共有 N(1<=N<=5,000)条时间被以时(0<=Hours<=99), 分(0<=Minutes<=59),秒(0<=Seconds<=59)的形式记录。
你必须要把他们按时,分,秒排序为 升序,最少的时间最先。 考虑到如下的样例,这三个解出相同题目数量的时间为
11:20:20
11:15:12
14:20:14
正确的排序结果应该是这样的:
11:15:12
11:20:20
14:20:14
输入描述:
第 1 行,一个整数 N 第 2~n+1 行,每行 3 个整数,表示时,分,秒
输出描述:
共 n 行,每行 3 个整数,表示排序完后的结果
示例1
输入
复制3 11 20 20 11 15 12 14 20 14
3 11 20 20 11 15 12 14 20 14
输出
复制11 15 12 11 20 20 14 20 14
11 15 12 11 20 20 14 20 14
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[5050];
int x,y,z,n;
cin>>n;
for(int i=0;i<n;i++){
cin>>x>>y>>z;
a[i]=3600*x+60*y+z;
}
sort(a,a+n);
for(int i=0;i<n;i++){
cout<<a[i]/3600<<" "<<(a[i]%3600)/60<<" "<<a[i]%60<<endl;
}
}
8.find函数 和 tolower toupper函数 的应用.
见题:
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章
中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )
输入描述:
共 2 行。 第 1 行为一个字符串,其中只含字母,表示给定单词; 第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章
输出描述:
一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 0 开始);如果单词在文章中没有出现,则直接输出一个整数 -1。
代码实现如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{ int b,ans=0;
string a;
string s;
getline(cin,a);
getline(cin,s);
for (int i=0;i<a.length();i++){
a[i]=tolower(a[i]);
}
for(int i = 0;i < s.length();i++){
s[i] = tolower(s[i]);
}
a=' '+a+' ';
s=' '+s+' ';
while(s.find(a,b)!=-1){
b=s.find(a,b)+a.length()-1;
ans++;
}
cout<<ans<<' '<<s.find(a);
}
可见tolower函数,将字符串a与字符串s统一转换成小写形式
find函数 是在s字符串中找到字符串a第一次出现的位置,
若找不到,则输出-1。
9.C语言中 abs、cabs、labs和fbs的区别
一)abs
C语言 abs() 函数用于求整数的绝对值。
头文件:math.h 或者 stdlib.h
语法/原型:int abs(int n);
n 表示要求绝对值的数。
返回值:参数 n 的绝对值。
二)cabs
C语言 cabs() 函数用于求字符的绝对值。
头文件:math.h 或者 stdlib.h
语法/原型:char cabs(char n);
n 表示要求绝对值的数。
返回值:参数 n 的绝对值。
三)labs
C语言 labs() 函数用于求长整新的绝对值。
头文件:math.h 或者 stdlib.h
语法/原型:long cabs(long n);
n 表示要求绝对值的数。
返回值:参数 n 的绝对值。
四)fabs
C语言 fabs() 函数用于求双精度浮点数的绝对值。
头文件:math.h
语法/原型:
double fabs(double x);
参数 x 是求绝对值的数。
返回值:参数 x 的绝对值。