牛客练习(一)
一、c++中static的用法详解
1、静态局部变量
#include<iostream> using namespace std; int fun(int x) { static int a=3; //静态局部变量 x+=a++; return x; } int main() { int x=2,sum; sum=fun(x); sum=sum+fun(x); printf("%d\n",sum); }
静态局部变量存在全局变量区,只在第一次时初始化,a=3,随后一直保留到整段程序运行完,所以,a是变化的。第一次调用sum=2+3=5,第二次调用2+4+5=11。
这是为了避免全局变量带来混乱的问题。
二、地址指针
#include <iostream> using namespace std; int main () { int a[5]={1,2,3,4,5};//a是数组,就是以5*4=20个字节为单位进行位置变化 cout<<&a[0]<<" "<<&a[4]<<endl; cout<<&a<<" "<<&a+1<<endl;//对应a数组的起始位置和下一个数组的起始位置 cout<<*a<<" "<<*(a+4)<<endl; // 对比上行代码,注意带括号和不带括号区别 int *p=(int *)(&a+1); //p指针将数组为单位转换为int为单位,所以这里(p-1),只是变换4字节 cout<<p<<endl; printf("%d",*(p-1)); return 0; }
三、
#include <iostream> using namespace std; int Num[100000]={0} ; int main () { int n;//作业份数 while(cin>>n) { int m,x,k;//每份挣得钱,罚的钱,复查的钱。 cin>>m>>x>>k; int n0=0,n1=0,r,M=0; for(int i=0;i<n;i++) { cin>>r; if(r==0) { n0++; M+=(m-x); } else { n1++; M+=(m-k); } } if(n0<=n1) { M+=n0; } else { M+=n1; } cout<<M<<endl; } return 0; } //4 5 2 1 1 1 1 0