【每日刷题】Day147
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 神奇数_牛客笔试题_牛客网
2. DNA序列__牛客网
3. I-十字爆破_牛客小白月赛25
1. 神奇数_牛客笔试题_牛客网
//思路:模拟
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool isprime(int n)//判断这个数是否为质数
{
for(int i = 2;i<=sqrt(n);i++)
if(n%i==0) return false;
return true;
}
int check(int n)
{
vector<int> arr;
while(n)
{
arr.push_back(n%10);//取出这个数字的每一位
n/=10;
}
for(int i = 0;i<arr.size();i++)
{
for(int j = 0;j<arr.size();j++)
{
if(i!=j&&arr[i])
{
if(isprime(arr[i]*10+arr[j]))//每计算出一个两位数,判断是否为质数
return 1;
}
}
}
return 0;
}
int main()
{
int a,b,ans = 0;
cin>>a>>b;
for(int i = max(10,a);i<=b;i++)
ans+=check(i);
cout<<ans;
return 0;
}
2. DNA序列__牛客网
//思路:滑动窗口。
//本题完全就是照着滑动窗口的思想来设计的
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin,s);
int len;
cin>>len;
string ans;
double flag = 0;//flag记录最大GC比例
int left = 0,right = 0;//left、right维护滑动窗口
double sum = 0;//sum记录 GC字符 的总数
while(right<s.size())
{
if(s[right]=='G'||s[right]=='C') sum++;
if(right-left+1==len)//窗口长度 = len,判断是否需要更新结果
{
if(flag<sum/len)
{
flag = sum/len;
string tmp(s.begin()+left,s.begin()+right+1);
ans = tmp;
}
if(s[left]=='G'||s[left]=='C')//left++前判断一下left位置是否为 G/C,以此改变 sum 的值
{
sum--;
}
left++;
}
right++;
}
cout<<ans;
return 0;
}
3. I-十字爆破_牛客小白月赛25
//思路:预处理
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector<vector<int>> arr(n,vector<int>(m));
vector<long long> row(n);//求行总和
vector<long long> col(m);//求列总和
for(int i = 0;i<n;i++)
{
for(int j = 0;j<m;j++)
{
scanf("%d",&arr[i][j]);
row[i]+=arr[i][j];//行求和
col[j]+=arr[i][j];//列求和
}
}
for(int i = 0;i<n;i++)
{
for(int j = 0;j<m;j++)
{
cout<<row[i]+col[j]-arr[i][j]<<" ";//直接输出计算结果
}
cout<<endl;
}
return 0;
}