【思特齐杯.云上蓝桥-算法集训营】第一周

这篇博客涵盖了多个算法问题的解决方案,包括跑步训练的计算、阶乘约数的求解、栈的出栈次序分析,以及一系列编程挑战,如哥德巴赫分解、图书排列、猴子分香蕉、稍小分数的计算、Excel地址转换、日期问题处理、一步之遥的路径计数、七星填空的解题策略等。这些内容涉及递归、数学、栈操作、日期处理等多个计算机科学领域,展示了算法在实际问题中的应用。
摘要由CSDN通过智能技术生成
1题 跑步训练
3880
2题 阶乘约数
39001250856960000
3题 出栈次序

#include <stdio.h>

int f(int n,int m) 
{
    if(n==0) //如果左边没有车返回1
        return 1;

    if(m==0) //如果检车站没车就入栈
        return f(n-1,1);

    if(m>0)//如果检车站有车
        //分两种情况,车辆入站和出站
        return f(n-1,m+1)+f(n,m-1);
    return 0;
}

int main() 
{
    printf("%d",f(16,0));
    return 0;
}

4题 哥德巴赫分解
173
5题 图书排列
479306
6题 猴子分香蕉
9
7题 稍小分数

int gcd(int a, int b)
{
    if(b==0) return a;
    return gcd(b,a%b);    
}
int main()
{
    // 这是屏幕上显示的那个分数 a/b
    int a = 7;
    int b = 13;
    
    int m,n;
    int max_a = 0;
    int max_b = 1; 
    
    for(n=100; n>1; n--){
        for(m=n-1; m>=1; m--){
            if(m*b<a*n && gcd(m,n)==1){
                if( max_a*n<max_b*m){  //填空
                    max_a = m;
                    max_b = n;
                    break;
                }
            }
        }
    }
    
    printf("%d/%d\n", max_a, max_b);    
    return 0;
}

8题 excel 地址

import java.util.*;
public class Main007_Excel地址 {
    public static void main(String[] args) {
      // TODO Auto-generated method stub
      Scanner in = new Scanner(System.in);
      int a = in.nextInt();
      String str = "ZABCDEFGHIJKLMNOPQRSTUVWXY";
      StringBuffer sb = new StringBuffer();
       while(a>0) {
            if(a%26==0) {
                 sb.append(str.charAt(a%26));
                 a=a-26;
            }else {
                 sb.append(str.charAt(a%26));
            }
            a=a/26;
       }
       sb.reverse();
       System.out.println(sb);
    }
}

9题 日期问题

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        String data[]=bf.readLine().split("\\/");

        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(
                "yyyy-MM-dd");//用于格式化时间
        ArrayList<Date> list=new ArrayList<Date>();
        //如果有00,那么00根据范围和常理没有00月和00日所以必为2000
        if (data[0].equals("00")||data[1].equals("00")||data[2].equals("00")) {
            Date d9;
            Date d10;
            if (data[0].equals("00")) {
                d9=new Date("2000"+"/"+data[1]+"/"+data[2]);
                d10=new Date("2000"+"/"+data[2]+"/"+data[1]);
            }else if(data[1].equals("00")){
                d9=new Date("2000"+"/"+data[0]+"/"+data[2]);
                d10=new Date("2000"+"/"+data[2]+"/"+data[0]);
            }else {
                d9=new Date("2000"+"/"+data[0]+"/"+data[1]);
                d10=new Date("2000"+"/"+data[1]+"/"+data[0]);
            }
            list.add(d9);
            list.add(d10);

        }else {
            //年月日
            Date d1=new Date("19"+data[0]+"/"+data[1]+"/"+data[2]);
            Date d2=new Date("20"+data[0]+"/"+data[1]+"/"+data[2]);
            //日月年
            Date d3=new Date("19"+data[2]+"/"+data[1]+"/"+data[0]);
            Date d4=new Date("20"+data[2]+"/"+data[1]+"/"+data[0]);     
            //日年月
            Date d5=new Date("19"+data[2]+"/"+data[0]+"/"+data[1]);
            Date d6=new Date("20"+data[2]+"/"+data[0]+"/"+data[1]);
            list.add(d1);
            list.add(d2);
            list.add(d3);
            list.add(d4);
            list.add(d5);
            list.add(d6);

        }

        Date start=new Date("1960/01/01");
        Date end=new Date("2059/12/31");
        //去重
        ArrayList<Date> list2=new ArrayList<Date>();
        for (int i = 0; i < list.size(); i++) {
            if (!list2.contains(list.get(i))) {
                list2.add(list.get(i));
            }
        }
        //排序后将符合时间段的日期输出
        Collections.sort(list2);
        for (int i = 0; i < list2.size(); i++) {
            if (list2.get(i).compareTo(start)==1&&list2.get(i).compareTo(end)==-1) {
                String temp=format.format(list2.get(i));
                if (temp.contains(data[0])&&temp.contains(data[1])&&temp.contains(data[2])) {
                    System.out.println(format.format(list2.get(i)));

                }
            }

        }

    }

}
11题一步之遥

97

12题
#include<bits/stdc++.h>
using namespace std;
const int N=505;
const int inf=0x3f3f3f3f;
typedef long long ll;
int n,m,ans;
char a[N][N];
void dfs(int i,int j,int an,int am){
    //printf("%d %d %d %d\n",i,j,an,am);
    if(an==0&&am==0) {
        ans++;
        return;
    }
    int x,y;
    if(i==j) x=i+1,y=1;
    else x=i,y=j+1;
    if(j==1){     
        if(an-1>=0){
            a[i][j]='A';
            dfs(x,y,an-1,am);    
        }
        if(am-1>=0){
            a[i][j]='B';
            dfs(x,y,an,am-1);            
        }
    }
    else {
        if(a[i-1][j-1]=='A'){
            if(a[i][j-1]=='B'){
                if(am-1>=0){
                    a[i][j]='B';
                    dfs(x,y,an,am-1);
                }                    
            }
            else {                
                if(an-1>=0){
                    a[i][j]='A';                
                    dfs(x,y,an-1,am);
                }                    
            }
        }
        else {
            if(a[i][j-1]=='B'){
                if(an-1>=0){                    
                    a[i][j]='A';
                    dfs(x,y,an-1,am);
                }                    
            }
            else {
                if(am-1>=0){
                    a[i][j]='B';
                    dfs(x,y,an,am-1);
                }                
            }
        }
    }
}
int main()
{
    int i,j,k,x,y;    
    scanf("%d %d",&n,&m);
    dfs(1,1,n,m);
    printf("%d",ans);
    return 0;
}

13题 七星填空
10 3 9 8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值