🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.CSDN
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:ACM周训练题目合集.CSDN
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️为什么我们不知疲倦,因为我们都在做自己所热爱的事 ♐
文章目录
- 前言
- A - How many days?
- B - Pangram
- C - Cifera
- D - Covered Points Count
- E - Ksusha and Array
- F - 最大连续子序列
- G - Wow! Such Doge!
- H - Counting Rectangles
- I - 素数判定
- J - 最大子矩阵
- 总结
前言
本周进行了一些特别基础的练习来巩固知识,写成博客方便我去复习使用。
A - How many days?
思路:语法题,根据题目要求,按部就班去写就可以AC
#include<stdio.h>
int main()
{
int m,k;
while(~scanf("%d %d",&m,&k))
{
if(m==0&&k==0)
{
break;
}
int cnt=0,day=0;
while(m)
{
cnt++;
m--;
if(cnt==k)
{
m++;
cnt=0;
}
day++;
}
printf("%d\n",day);
}
return 0;
}
B - Pangram
思路:桶排序思想
#include<iostream>
using namespace std;
int book[27];
int main()
{
int n;
cin>>n;
char ch;
for(int i=0;i<n;++i)
{
cin>>ch;
if(ch>='A'&&ch<='Z')
{
ch=ch+'a'-'A';
}
book[ch-97]++;
}
int flag=0;
for(int i=0;i<26;++i)
{
if(book[i]==0)
{
flag=1;
break;
}
}
if(flag==1) puts("NO");
else puts("YES");
return 0;
}
C - Cifera
思路:判断k是否是l的次幂次关系,语法问题
#include<stdio.h>
typedef long long ll;
int main()
{
ll k,l,tmp;
scanf("%lld %lld",&k,&l);
tmp=k;
int cnt=0;
while(tmp<l)
{
tmp*=k;
cnt++;
}
if(tmp==l)
{
puts("YES");
printf("%d\n",cnt);
}
else puts("NO");
return 0;
}
D - Covered Points Count
等我研究一下,emmm我不会我是fw
E - Ksusha and Array
思路:qsort进行排序,然后拿最小的那个去整除所有数字看是否可以整除
#include<stdio.h>
#include<stdlib.h>
int cmp1(const void* e1, const void* e2)
{
return *((int*)e1) - *((int*)e2);
}
int flag=0;
int main()
{
int n;
int arr[100010];
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d",&arr[i]);
}
qsort(arr,n,sizeof(arr[0]),cmp1);
int flag=1;
for(int i=0;i<n;++i)
{
if(arr[i]%arr[0])
{
flag=0;
break;
}
}
if(flag)
{
printf("%d\n",arr[0]);
}
else
{
printf("-1\n");
}
return 0;
}
F - 最大连续子序列
#include "iostream"
#include "stdio.h"
#include "math.h"
#include "algorithm"
#include "string"
using namespace std;
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
int n;
int a[10010];
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
int i,j=0,tmp=0,sum=0,maxx=-1,s=0,e=n-1;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
tmp+=a[i];
if(tmp>maxx)
{
s=j;
e=i;
maxx=tmp;
}
else if(tmp<0)
{
j=i+1;
tmp=0;
}
}
if(maxx<0)
maxx=0;
printf("%d %d %d\n",maxx,a[s],a[e]);
}
}
G - Wow! Such Doge!
#include<iostream>
#include<cstdio>
#include <string.h>
using namespace std;
int main()
{
char arr[1001];
int len,i,cnt=0;
while(~scanf("%s",arr))
{
len=strlen(arr);
for(i=0;i<len;i++)
{
if(arr[i]=='d'||arr[i]=='D')
{
if(arr[i+1]=='o'||arr[i+1]=='O')
{
if(arr[i+2]=='g'||arr[i+2]=='G')
{
if(arr[i+3]=='e'||arr[i+3]=='E')
{
cnt++;
i+=3;
}
}
}
}
}
}
cout<< cnt <<endl;
return 0;
}
H - Counting Rectangles
不会
I - 素数判定
#include<stdio.h>
int main()
{
int x,y,i,j;
scanf("%d %d",&x,&y);
while(x!=0||y!=0)
{
int flag=0;
for(i=x;i<=y;i++)
{
int sum=i*i+i+41;
for(j=2;j<sum;j++)
{
if(sum%j==0)
{
flag=1;
break;
}
else continue;
}
}
if(flag==0)
{
printf("OK\n");
}
else
{
printf("Sorry\n");
}
scanf("%d %d",&x,&y);
}
return 0;
}
J - 最大子矩阵
思路:二维前缀和公式的使用
#include<stdio.h>
#include<string.h>
#include<math.h>
int arr[1010][1010];
int main()
{
int t,m,n,x,y;
scanf("%d",&t);
while(t--)
{
memset(arr,0,sizeof(arr));
int ans=0;
scanf("%d %d %d %d",&n,&m,&x,&y);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
scanf("%d",&arr[i][j]);
arr[i][j]+=arr[i-1][j]+arr[i][j-1]-arr[i-1][j-1];
if(i>=x&&j>=y)
{
ans=fmax(arr[i][j]-arr[i-x][j]-arr[i][j-y]+arr[i-x][j-y],ans);
}
}
}
printf("%d\n",ans);
}
return 0;
}
总结
多刷,多学,多做。
我是夏目浅石,希望和你一起学习进步,刷题无数!!!希望各位大佬
能一键三连支持一下博主
,hhhh~我们下期见喽
如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn
✨ 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力! \textcolor{9c81c1}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向! \textcolor{ed7976}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富! \textcolor{98c091}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!