填空题
题目:8518是一个非常特殊的数.............
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string.h>
using namespace std;
const int N = 110;
int a[N][N];
int f[N][N];
char g[N][N];
int n,m;
int main()
{
for(int j=10;j<=10000;j++)
{
string x=to_string(j);
int res=0;
for(int i=0;i<x.size();i++)
{
res=res*16+(x[i]-'0');
}
if(res%j==0){
cout<<j<<endl;
}
}
}
题目:从第一行第一列画一条折现.....
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int a[N][N];
int f[N][N];
char g[N][N];
int n,m;
int main()
{
int t;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>g[i]+1;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
a[i][j]=g[i][j]-'0';
}
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j];
}
cout<<f[30][60]<<endl;
}
3.将2022拆分成不同的质数的和
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e6+10;
bool check(int x){
for(int i=2;i<=x/i;i++){
if(x%i==0) return false;
}
return true;
}
int main()
{
int n=2022;
int res=0;
for(int i=2;i<2022;i++){
if(i>n) break;
if(check(i)&&n-i>=0)
{
cout<<(i)<<endl;
res++;
n-=i;
}
}
cout<<res;
}
编程题:
6-7语法题
8.
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
string a;
cin>>a;
int n=a.size();
int idx=1000000;
int l=0,r=0,s=n-1,f=1;
for(int k=0;k<n;k++){
if(a[k]!=a[s--]){
f=0;
break;
}
}
if(f==1){
cout<<a;
return 0;
}
for(int k=n/2;k<n-1;k++){
int i=k-1,j=k+1;
int flag=1;
while(i>=0&&j<n){
if(a[i]!=a[j]){
flag=0;
break;
}
else{
i--,j++;
}
}
if(i==0&&j<n&&flag){
if(k<idx){
idx=k-1;
l=0,r=1;
}
}
if(i>0&&j==n&&flag){
if(k<idx){
idx=k-1;
l=1,r=0;
}
}
if(i==0&&j==n&&flag){
idx==k-1;
l=r=1;
}
}
if(idx==1000000&&l==0&&r==0){
for(int k=0;k<n;k++)cout<<a[k];
for(int k=n-1;k>=0;k--)cout<<a[k];
}
else{
if(l==0&&r==1){
for(int k=n-1;k>idx;k--)cout<<a[k];
for(int k=idx;k<n;k++)cout<<a[k];
}
if(l==1&&r==0){
for(int k=0;k<=idx;k++)cout<<a[k];
for(int k=idx-1;k>=0;k--)cout<<a[k];
}
if(l==1&&r==1){
cout<<a;
}
}
return 0;
}
9.
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e6+10;
long long tr[N];
long long res;
int n,m;
char g[110][110];
bool st[110][110];
int dx[4] = {-1,-1,1,1}, dy[4] = {-1,1,-1,1};
bool check(int x,int y){
if(x<=0||y<=0||x>n||y>m) return false;
return true;
}
void dfs(int x,int y,int depth)
{
int tx1=x+dx[0]*depth,ty1=y+dy[0]*depth;
int tx2=x+dx[1]*depth,ty2=y+dy[1]*depth;
int tx3=x+dx[2]*depth,ty3=y+dy[2]*depth;
int tx4=x+dx[3]*depth,ty4=y+dy[3]*depth;
if(check(tx1,ty1)==false) return;
if(check(tx2,ty2)==false) return;
if(check(tx3,ty3)==false) return;
if(check(tx4,ty4)==false) return;
if(g[tx1][ty1]!=g[x][y]) return;
if(g[tx2][ty2]!=g[x][y]) return;
if(g[tx3][ty3]!=g[x][y]) return;
if(g[tx4][ty4]!=g[x][y]) return;
res++;
dfs(x,y,depth+1);
return ;
}
int main()
{
scanf("%d%d", &n, &m);
for(int i=1;i<=n;i++){
cin>>g[i]+1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++){
dfs(i,j,1);
}
}
cout<<res;
return 0;
}
10.
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e6+10;
long long tr[N];
long long res;
int n,m;
int a[N];
int mx=0;
int lowbit(int x)
{
return x & -x;
}
void add(int x,int c){
for(int i=x;i<=mx;i+=lowbit(i))
tr[i]+=c;
}
long long query(int x) // 返回前x个数的和
{
long long res = 0;
for (int i = x; i; i -= lowbit(i)) res += tr[i];
return res;
}
int main()
{
scanf("%d", &n);
for(int i=1;i<=n;i++){
scanf("%d", &a[i]);
mx=max(mx,a[i]);
}
for(int i=1;i<=n;i++)
{
int x=a[i];
res+=query(mx)-query(a[i]);
add(x,x);
}
cout<<res;
return 0;
}