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; }