编程:
1、程序=算法+数据结构+(文档)算法指的是方法、数据结构是对数据的存储,文档是注释等。
算法的特性:确定性(固定的执行顺序,一定的输入有固定的结果)/有限性(在规定的时间和步数内完成)/可行性/输入(0-n)/输出(1-n)注:没有输出的变量和代码段会在编译的时候被优化,在汇编语言中不会出现。
2、给定32位有符号整数,a,b,c,输出的解的个数
题目理解:
a!=0 的时候 两个解,等于 1个解,小于0个解
a=0 的时候 b=0的时候 0个解,b不等于0 1个解
注意:32位有符号的数,需要用long long来解。但是long long的时候4ac仍然会溢出。所以需要使用和
比较。
且需要注意:浮点数与浮点数不能说等于,因为浮点数有16位是精确的
void result_number()
{
long long a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
if(!a &&!b &&!c) cout<<"inf";
else if(!a&& !b) cout<<0;
else if(!a) cout<<1;
else if(a== -(111<<31) && c== -(111<<31)) cout<<0;//越界的一种情况,单独考虑
else if(a*c<0) cout<<2;
else if(b*b > a*c*4ull) cout<<2;//确定ac一定可以不是负数就可以用unsigned long long 了
else if(b*b==a*c*4ull) cout<<1;
else if(b*b < a*c*4ull) cout<<0;
}
3、时间复杂度:O
n/1+n/2+n/3+.......+n/n = nlnn
对根号x1求微分
4、怎么求一个年分是不是有效的
void is_effective ()
{
int y,m,d; scanf("%d:%d:%d",&y,&m,&d);
bool is_legal=( (y>0)&&(m>0 && m<13)&&
(m==2 && d>0 && d<28+(y%400==0 || y%100 && y%4==0))&&
(m!=2 && d>0 && d<30+(0x15AA>>m)&1) );
cout<<(is_legal?"Yes":"No");
return ;
}
判断一个年份是不是闰年:(y%400==0 || y%100 && y%4==0,并且是闰年的话是28+1!!!写的真好
写的更好的是判断一个月份是不是大月(0x15AA>>m)&1,其中0x15AA是16进制,如果那个月是大月那么对应位就是1.。那么m是几右移之后最后一位一定是1,和1做与操作,得到的结果就是1。
5、求素数的方法:
第一种:
bool solution1(int n)
{
bool is=true;
for(int i=2;i*i<=n;i++)//i不能遍历到n
if(n%i==0) return false;
return true;
}
第二种:筛发:时间复杂度 O(nlnn),对每一个数开始考虑他是不是i的倍数
const int maxn=1000100;
bool prime[maxn]={};
bool solution2(int n)
{
for(int i=2;i<=n;i++) prime[i]=true;
for(int i=2;i<=n;i++)
for(int j=i*2;j<=n;j+=i)//注意等于号需要遍历到n
prime[j]=false;
return prime[n];
}
第三种:
bool solution3(int n)//大于等于5的质数一定和6的倍数相邻
{
if(n==2||n==3) return true;
if(n%6!=1 && n%6!=5) return false;
for(int i=5;i*i<=n;i+=6)
if(n%i==0 || n%(i+2)==0) return false;
return true;
}