牛客每日练习----Xiaohong‘s Mind,Serpentine Square Array,Digit Sum of N!

本文探讨了三个算法挑战,包括字符串匹配、蛇形方阵的数字定位以及阶乘的数字位数求和,提供了详细的代码解决方案,适合对算法感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力。                                      ----喻言

链接:https://ac.nowcoder.com/acm/problem/15865
来源:牛客网
 

题目描述

小红想知道小明的心里到底有没有自己,又不好意思亲自去问小明,于是她的闺蜜帮她想了个办法:

小红说出一个字符串为s1,小明说出一个字符串为s2,s1和s2均由字母组成,允许重复,如果s1中出现的每种字符在s2中都出现过,那么就认为小明心中有小红,否则无。('A'和'a'被认为是相同字母)

例如: s1="AECF",s2="ABCDEFGH",s1="AECF",输出"Yes"

            s1="CDbZ" , s2="ABcKdBSCg",s1="CDbZ",输出"No"

输入描述:

第一行输入一个正整数T(1<=T<=10),表示T组数据;
每组数据包含两个字符串s1和s2,分别代表小红说出的字符串和小明说出的字符串,字符串的长度满足:1<=s1<=s2<=1000000;

输出描述:

对于每组数据,输出判断结果,有则为"Yes",无则为"No"。

示例1

输入

复制

2
AECF
ABCDEFGH
CDbZ
ABcKdBSCg

输出

复制

Yes
No
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=1e5+10;
int const mod=1e9+7;
const int maxn=1e5+10;
char a[1000005];
char b[1000005];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        cin>>a;
        cin>>b;
        int len=strlen(a),len1=strlen(b),flag;
        for(int i=0;i<len;i++)
        {
            flag=0;
            for(int j=0;j<len1;j++)
                if((b[j]==a[i]+32)||(b[j]==a[i]-32)||b[j]==a[i])
                        flag=1;                   
            if(flag==0)
                break;    
        }
        if(flag==0)
        	cout<<"No"<<endl;
        else
        	cout<<"Yes"<<endl;
          
    }
    return  0;  
}

链接:https://ac.nowcoder.com/acm/problem/15862
来源:牛客网
 

题目描述

   给出一个正整数n,构造出一个(2n-1)*(2n-1)的蛇形方阵,现在给出方阵该方阵的任意一个点(i,j),你能求出这个点上的数是多少吗?

输入描述:

第一行输入一个整数T(0 < T < 100),表示有T组输入数据;
接下来T行,每一行输入三个正整数n,i,j(1 < n < 1000,0 < i、j <= 2*n-1);

输出描述:

对于每组输入数据,输出点(i,j)上对应的数,如果点(i,j)上没有数字,输出-1;

示例1

输入

复制

3
2 3 2
3 2 3
4 4 5

输出

复制

3
-1
16
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=1e5+10;
int const mod=1e9+7;
const int maxn=1e5+10;
int t,mp[2005][2005];
int main()
{
    cin>>t;
    while(t--)
    {
        int n,x,y;
        cin>>n>>x>>y;
        int p=0,q=n+1,ct=1;
        memset(mp,0,sizeof(mp));
        while(ct<=n*n)
        {
            while(q-1>=1&&!mp[p+1][q-1])
            {
                mp[p+1][q-1]=ct;
                p++;
                q--;
                ct++;
            }
            while(p+1<=(2*n-1)&&!mp[p+1][q+1])
            {
                mp[p+1][q+1]=ct;
                p++;
                q++;
                ct++;
            }
            while(q+1<=(2*n-1)&&!mp[p-1][q+1])
            {
                mp[p-1][q+1]=ct;
                p--;
                q++;
                ct++;
            }
            while(p-1>=1&&!mp[p-1][q-1])
            {
                mp[p-1][q-1]=ct;
                p--;
                q--;
                ct++;
            }  
        }
        if(mp[x][y]) 
			cout<<mp[x][y]<<endl;
        else 
			cout<<-1<<endl;
    }
    return 0;
}

链接:https://ac.nowcoder.com/acm/problem/15861
来源:牛客网
 

题目描述

给你一个整数N,定义一种操作"digit sum of N!":表示将N!的所有位数相加,得到一个sum,再将sum的所有位数相加...不断重复此过程,输出整数N操作到只有一位数的时候的值。

输入描述:

输入包含多组数据,每组数据输入一个整数N(1<=N<=10000);

输出描述:

对于每一组数据,输出对应的值。

示例1

输入

复制

2
3
2018

输出

复制

2
6
9
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=1e5+10;
int const mod=1e9+7;
const int maxn=1e5+10;
int n;
int main()
{
    
    while(scanf("%d", &n)!=EOF)
    {
        if(n==1)
            cout<<"1"<<endl;
        else if(n==2)
            cout<<"2"<<endl;
        else if(n==3||n==4)
            cout<<"6"<<endl;
        else if(n==5)
            cout<<"3"<<endl;
        else
            cout<<"9"<<endl;   
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值