牛客练习(一)

一、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

 

  

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2018-04-05 21:08  箬笠蓑衣  阅读(244)  评论(0编辑  收藏  举报