noi寒假刷题之旅_1.6编程基础之一维数组(15题)

又回来了,先总结一下前两天干什么去了:

装了一下官方版的kali2.0和一个完整版的kali2.0,然后更新了一下我的老版本的kali内核。为什么呢?还不是为了安装W3af,太难了,装了3天都没装上,本来已经放弃了就打算直接用console界面,谁知道一start它又抱了一堆错,真的要吐血了。W3AF果断放弃,岂可休。但是装机的过程倒是越发熟练了,发现官方版的kali图形界面不是很兼容,老是有闪屏,而且收藏夹里的网站也是打不开的(虽然这些网站在火狐书签栏里都有),后来也摸了几个比较感兴趣的软件,新版的软件库更加丰富了,好多软件还是要FQ,好累。而且发现有的还是不能直接用,要装好多的依赖。一些老软件也不见了要自己安装,特别是OWASP,还好安装倒是挺简单的。试了一下kali-undercover功能,感觉它不是很稳定,其中有一次undercover后菜单栏都没有了。。。。学了一下华为云的使用,考虑到我有一个弹性服务器ECS,打算配置一个Linux的小博客,装完了apache2,php,mysql,word press,谁知道一打开界面,提示word press不兼容php,吐血。爬了两天回来写写代码散散心。


 

1.6编程基础之一维数组(15题)

01:与指定数字相同的数的个数

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int num[102]={};
	for(int i=0;i<n;++i)cin>>num[i];
	int m,count=0;cin>>m;
	for(int i=0;i<n;++i)
	{
		if(num[i]==m)++count;
	 } 
	cout<<count;
	return 0;
 } 

02:陶陶摘苹果

#include<iostream>
using namespace std;
int main()
{
	int num[102]={};
	for(int i=0;i<10;++i)cin>>num[i];
	int m,count=0;cin>>m;
	for(int i=0;i<10;++i)
	{
		if(num[i]<=m+30)++count;
	 } 
	cout<<count;
	return 0;
 } 

03:计算书费

#include<iostream>
using namespace std;
int main()
{
	double temp,num[10]={28.9,32.7,45.6,78,35,86.2,27.8,43,56,65},sum=0;
	for(int i=0;i<10;++i)
	{
		cin>>temp;
		sum+=temp*num[i];
	}
	printf("%.1f",sum); 
	return 0;
} 

04:数组逆序重放

#include<iostream>
using namespace std;
int main()
{
	int n,num[102]={};
	cin>>n;
	for(int i=0;i<n;++i)
	{
		cin>>num[i];
	}
	cout<<num[n-1];
	for(int i=n-2;i>=0;--i)
	{
		cout<<" "<<num[i];
	}
	return 0;
} 

05:年龄与疾病

#include<iostream>
using namespace std;
int main()
{
	int n,temp;
	double num[4]={};
	cin>>n;
	for(int i=0;i<n;++i)
	{
		cin>>temp;
		if(0<=temp&&temp<=18)
		{
			num[0]++;
		}
		else if(temp<=35)
		{
			num[1]++;
		}
		else if(temp<=60)
		{
			num[2]++;
		}
		else
		{
			num[3]++;
		}
	}
	for(int i=0;i<4;++i)
	{
		printf("%.2f%%\n",num[i]/n*100.0);
	}
	return 0;
} 

06:校门外的树

#include<iostream>
using namespace std;
int tree[10001];
int main()
{
	int L,M;
	cin>>L>>M;
	int a,b;
	for(int i=1;i<=M;++i)
	{
		cin>>a>>b;
//		cout<<a<<","<<b<<endl; 
		for(int j=a;j<=b;++j)
		{
			tree[j]=1;
//			cout<<j<<endl;
		}
	}
	int count=0;
	for(int i=0;i<=L;++i)
	{
		if(tree[i]==0)
		{
			++count;
//			cout<<i<<endl;	
		}
	}
	cout<<count;
	return 0;
} 

07:有趣的跳跃

#include<iostream>
#include<cmath>
#include <algorithm>
using namespace std;
int tree[10001];
int main()
{
	int n;
	int num[3001]={},temp[3001]; 
	cin>>n;
	cin>>temp[0];
	for(int i=1;i<n;++i)
	{
		cin>>temp[i];
		num[i-1]=abs(temp[i]-temp[i-1]);
	}
	sort(num,num+n);
	int flag=1;
	for(int i=0;i<n-2;++i)
	{
		if((num[i+1]-num[i])!=1)
		{
			flag=0;break;
		}
	}
	if(flag)
	{
		cout<<"Jolly";
	}
	else
	{
		cout<<"Not jolly";
	}
	return 0;
} 

08:石头剪刀布

#include<iostream>
#include<cmath>
#include <algorithm>
using namespace std;
int tree[10001];
bool Cmp(int a,int b)
{
	if(a==0&&b==2)
	{
		return 1;
	}
	else if(a==2&&b==5)
	{
		return 1;
	}
	else if(a==5&&b==0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int n,na,nb;
	int ca=0,cb=0;
	int A[101]={},B[101]={};
	cin>>n>>na>>nb; 
	for(int i=0;i<na;++i)cin>>A[i]; 
	for(int i=0;i<nb;++i)cin>>B[i]; 
	for(int i=0;i<n;++i)
	{
		if(Cmp(A[i%na],B[i%nb])) ca++;
		if(Cmp(B[i%nb],A[i%na])) cb++;
	}
	if(ca>cb)
	{
		cout<<"A";
	}
	else if(cb>ca)
	{
		cout<<"B";
	}
	else
	{
		cout<<"draw";	
	} 
	return 0;
} 

09:向量点积计算

#include<iostream>
#include<cmath>
#include <algorithm>
using namespace std;

int main()
{
	int n,sum=0;
	int a[1001]={},b[1001]={};
	cin>>n;
	for(int i=0;i<n;++i)cin>>a[i];
	for(int i=0;i<n;++i)cin>>b[i];
	for(int i=0;i<n;++i)
	{
		sum+=a[i]*b[i];
	}
	cout<<sum;
	return 0;
} 

10:大整数加法

#include<iostream>
#include<cmath>
#include<algorithm>
#include<string> 
using namespace std;
int res[20000];
int ada[20000],adb[20000];
int to_Int(char a)
{
	return a-'0';
}
int main()
{
	string a,b;
	int index=0;
	cin>>a>>b;
	if(a=="0"&&b=="0")
	{
		cout<<0;
		return 0;
	}
	int start=max(a.length(),b.length());
	for(int i=a.length()-1,j=0;i>=0;--i,++j)ada[j]=to_Int(a[i]);
	for(int i=b.length()-1,j=0;i>=0;--i,++j)adb[j]=to_Int(b[i]);
	
	for(int i=0;i<start;++i,++index)
	{
		res[index]=res[index]+ada[i]+adb[i];
		if(res[index]>9)
		{
			res[index]-=10;
			res[index+1]++;
		}
	}
	int i;
	for(i=index;res[i]==0;--i);
	for(;i>=0;--i)cout<<res[i];
	return 0;
} 

11:大整数减法

#include<iostream>
#include<cmath>
#include<algorithm>
#include<string> 
using namespace std;
int res[20000];
int ada[20000],adb[20000];
int to_Int(char a)
{
	return a-'0';
}
int main()
{
	string a,b;
	int index=0;
	cin>>a>>b;
	int start=max(a.length(),b.length());
	for(int i=a.length()-1,j=0;i>=0;--i,++j)ada[j]=to_Int(a[i]);
	for(int i=b.length()-1,j=0;i>=0;--i,++j)adb[j]=to_Int(b[i]);
	
	for(int i=0;i<start;++i,++index)
	{
		res[index]=ada[i]-adb[i];
		if(res[index]<0)
		{
			int indexa=i;
			res[index]+=10;indexa++;
			ada[indexa]--;
			while(ada[indexa]<0)
			{
				ada[indexa]+=10;
				indexa++;
				ada[indexa]--;
			}
		}
//		cout<<">>"<<res[index]<<endl;
	}
	int i,flag=1;
	for(i=index;res[i]==0;--i);
	for(;i>=0;--i)
	{
		cout<<res[i];flag=0;
	}
	if(i<0&&flag)cout<<0;
	return 0;
} 

12:计算2的N次方

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n;cin>>n;
	printf("%.0lf",pow(2,n));
	return 0;
} 

13:大整数的因子

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
	string c;
	int index=0,flag=0;
	cin>>c;
	for(int i=2;i<=9;++i)
	{
		int index=0;
		for(int j=0;j<c.length();++j)
		{
			index=(index*10+c[j]-'0')%i;
		}
		if(!index)
		{
			flag=1;cout<<i<<" ";
		}
	}
	if(!flag)
	{
		cout<<"none";
	}	
	return 0;
} 

14:求10000以内n的阶乘[这里是先把每一位算出来在计算进位]

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int ans[100000010];
int main()
{
	int n,j,add=0,index=1;
	cin>>n;
	ans[1]=1;
	for(int i=2;i<=n;++i)
	{		
		for(int j=1;j<=index;++j)
		{
			ans[j]*=i;	
		}
		for(int j=1;j<=index;++j)
		{
			if(ans[j]>=10)
			{
				ans[j+1]+=ans[j]/10;
				ans[j]%=10; 
			}
		}
		while(ans[index+1]>0)
		{
			index++;
			ans[index+1]=ans[index]/10;
			ans[index]%=10;	
		}		
	}
	for(int i=index;i>=1;--i) cout<<ans[i];
	return 0;
}

15:阶乘和

#include<iostream>
using namespace std;
#define N 100000
int a[N],n,tot=1,lena=1,ans[N];
int main()
{
    cin>>n;
    a[1]=1;ans[1]=1;
    for(int i=2;i<=n;i++)
    {
        for(int j=1;j<=lena;j++)a[j]*=i;
        for(int j=1;j<=lena;j++)
        {
            if(a[j]>9)
            {
                a[j+1]+=a[j]/10;
                a[j]%=10;
                if(j==lena)lena++;
            }
        }
        tot=max(lena,tot);
        for(int j=1;j<=tot;j++)
            ans[j]+=a[j];
        for(int j=1;j<=tot;j++)
            if(ans[j]>9)
            {
                ans[j+1]++;
                ans[j]-=10;
                if(tot==j)tot++;
            }
    }
    for(int i=tot;i>=1;i--)cout<<ans[i];
    cout<<endl;
} 
posted @ 2020-01-17 16:46  东坡肉肉君  阅读(2771)  评论(0编辑  收藏  举报