C++编程
Posted 彭祥.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程相关的知识,希望对你有一定的参考价值。
计数排序
前缀和
统计字符
#include <iostream>
#include <cstdio>
using namespace std;
int cnt[26];
int main()
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
string s;
cin>>s;
for(int i=0;i<s.size()-1;i++)
if('A'<=s[i]&&s[i]<='Z')
cnt[s[i]-'A']++;
else
cnt[s[i]-'a']++;
int max=0,index;
for(int i=0;i<26;i++)
if(cnt[i]>max)
max=cnt[i];
index=i;
cout<<max<<" "<<(char)(index+'A');
return 0;
越野比赛
#include<iostream>
#include<cstdio>
using namespace std;
long long d[100005],sum[100005];
int main()
freopen("hike.in","r",stdin);
freopen("hike.out","w",stdout);
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
scanf("%lld",&d[i]);
for(int i=1;i<n;i++)
sum[i]=sum[i-1]+d[i];
int a,b;
for(int i=0;i<k;i++)
scanf("%d%d",&a,&b);
printf("%lld ",sum[b-1]-sum[a-1]);
return 0;
多项式
#include<iostream>
#include<cstdio>
using namespace std;
int in_num[4],in_index[4],out_num[4],out_index[4];
int main()
freopen("mul.in","r",stdin);
freopen("mul.out","w",stdout);
int a,b;
for(int i=0;i<4;i++)
cin>>a>>b;
in_num[i]=a;
in_index[i]=b;
out_num[0]=in_num[0]*in_num[2];
out_num[1]=in_num[0]*in_num[3];
out_num[2]=in_num[1]*in_num[2];
out_num[3]=in_num[1]*in_num[3];
out_index[0]=in_index[0]+in_index[2];
out_index[1]=in_index[0]+in_index[3];
out_index[2]=in_index[1]+in_index[2];
out_index[3]=in_index[1]+in_index[3];
for(int i=0;i<4;i++)
for(int j=i+1;j<4;j++)
if(out_index[i]==out_index[j])
out_num[i]=out_num[i]+out_num[j];
out_index[j]=0;
out_num[j]=0;
int temp,temps;
for(int i=0;i<4;i++)
for(int j=i+1;j<4;j++)
if(out_index[j]>out_index[i])
temp=out_index[i];
out_index[i]=out_index[j];
out_index[j]=temp;
temps=out_num[i];
out_num[i]=out_num[j];
out_num[j]=temps;
for(int i=0;i<4;i++)
if(out_num[i]!=0)
cout<<out_num[i]<<" "<<out_index[i]<<endl;
return 0;
四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 44 个正整数的平方和。如果把 00 包括进去,就正好可以表示为 44 个数的平方和。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
freopen("square.in","r",stdin);
freopen("square.out","w",stdout);
int N;
cin>>N;
for(int i=0;i<N;i++)
if(i*i>N)break;
for(int j=0;j<N;j++)
if(j*j>N)break;
for(int k=0;k<N;k++)
if(k*k>N)break;
double m=sqrt(N-i*i-j*j-k*k);
if(int(m)==m)
cout<<i<<" "<<j<<" "<<k<<" "<<m<<endl;
return 0;
return 0;
装饰效果
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
int n,a[1005]=0;
int max1=0,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
sum+=a[j];
if(sum>max1)
max1=sum;
sum=0;
cout<<max1;
return 0;
奖券数目
有些人很迷信数字,比如认为带 4 的数不吉利。某抽奖活动的奖券号码是 55 位数 (10000-99999)(10000−99999),要求其中不要出现带“4”的号码,主办方想让你计算一下,如果发行号码 n 到 m 之间的奖券,在任何两张奖券都不重复的情况下,可以发行多少张?
#include<iostream>
#include<cstdio>
using namespace std;
int main()
freopen("ticket.in","r",stdin);
freopen("ticket.out","w",stdout);
int n,m,cnt=0;
cin>>n>>m;
for(int i=n;i<=m;i++)
int a=i/10000;
int b=i/1000%10;
int c=i/100%10;
int d=i/10%10;
int e=i%10;
if(a!=4&&b!=4&&c!=4&&d!=4&&e!=4)
cnt++;
cout<<cnt;
return 0;
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
freopen("len.in","r",stdin);
freopen("len.out","w",stdout);
int n,L[105];
int min=10001;
cin>>n;
for(int i=1;i<=n;i++)
cin>>L[i];
for(int i=1;i<n;i++)//定位置
for(int j=i+1;j<=n;j++)//移动遍历
int cha=abs(L[j]-L[i]);
if(cha<min)
min=cha;
cout<<min;
return 0;
北极圈远征
在征服南极之后,Davor 开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。需要一共筹集 n 元钱。他打算在每个星期一筹集 x 元,星期二筹集 x+k x+2k 元,……,星期日筹集 x+6k 元,并在 52 个星期内筹集完。其中 x,k 为正整数,并且满足 1<x< 100 1≤x≤100。
现在请你帮忙计算 x,k 为多少时,能刚好筹集 n元。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
freopen("money.in","r",stdin);
freopen("money.out","w",stdout);
int n;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<n;j++)
int sum=52*(21*i+7*j);
if(sum==n&&1<=j&&j<=100)
cout<<j<<endl<<i;
return 0;
return 0;
#include <iostream>
#include <fstream>
using namespace std;
const int N = 100;
int matrix[N + 1][N + 1], rowsum[N + 1][N + 1];
int m, n, i, j, first, last, area, ans;
int main()
freopen("submatrix.in","r",stdin);
freopen("submatrix.out","w",stdout);
cin >> m >> n;
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
cin >> matrix[i][j];
ans = matrix[1][1]; // 左上角第一个点
for (i = 1; i <= m; i++) rowsum[i][0] = 0; // 原题这个地方有换行,造成阅读诱导
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
rowsum[i][j] = rowsum[i][j - 1] + matrix[i][j]; //每一行做一个前缀和
for (first = 1C++多线程编程