栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第三届西南石油大学程序设计竞赛热身赛题解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第三届西南石油大学程序设计竞赛热身赛题解

第三届西南石油大学程序设计竞赛热身赛题解

热身赛很简单就是拿来熟悉一下OJ比赛环境的

1.熟悉一下Online Judge的环境

就A+B经典入门问题没啥说的

#include
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
	printf("%d",a+b);
    return 0;
}
2.跳远成绩

就小学数学题也没啥说的

#include
using namespace std;
typedef long long ll;
int main(){
    double x;
    scanf("%lf",&x);
    printf("%.1lf",(x+0.8*x+0.9*x)/3);

    return 0;
}
3.数字解密

就将这个四位数千位和百位颠倒、十位和个位颠倒就行

#include
using namespace std;
typedef long long ll;
int main(){
    string s;
    cin>>s;
    cout< 
4.位数问题 

一个不太难的dp,设dp[i] [0]表示i位数有偶数个3的数字个数,dp[i] [1]表示i位数有奇数个3的数字个数

那么构造递推式有

  • dp[i] [0] = dp[i-1] [0]*9 + dp[i-1] [1]
  • dp[i] [1] = dp[i-1] [1]*9 + dp[i-1] [0]

第一个递推式,前一半意思就是i-1位数所有有偶数个3的数字个数,然后第i位放0~9除了3一共9个数,这样就组成了i位数字有偶数个3,后一半意思是i-1位数所有有奇数个3的数字个数,然后第i位放3,这样也组成了i位数字有偶数个3加起来就是总个数

第二个递推式和上面差不多,前一半意思就是i-1位数所有有奇数个3的数字个数,然后第i位放0~9除了3一共9个数,这样就组成了i位数字有奇数个3,后一半意思是i-1位数所有有偶数个3的数字个数,然后第i位放3,这样也组成了i位数字有奇数个3加起来就是总个数

然后还有一个问题就是最高位不能是0,所以在计算最高位的时侯不能放0,且只有一位数的时候,也只能也只能是1~9,9个数字,因为0不能做为位数讨论
C/C++:

#include
using namespace std;
const int md =12345;
int dp[1005][5];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    dp[1][0]=9;//初始化
    dp[1][1]=1;
    for(int i=2;i
        dp[i][0]=(dp[i-1][0]*9+dp[i-1][1])%md;
        dp[i][1]=(dp[i-1][1]*9+dp[i-1][0])%md;
    }
    dp[n][0]=(dp[n-1][0]*8+dp[n-1][1])%md;//最高位单独计算
    if(n==1)dp[n][0]=8;//只有一位数的时候特判
    cout< 

Java:

import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner cin=new Scanner(System.in);
        int [][]dp= new int [1005][5];
        int n,md=12345;
        n =cin.nextInt();
        dp[1][0]=9;
        dp[1][1]=1;
        for(int i=2;i
        	dp[i][0]=(dp[i-1][0]*9+dp[i-1][1])%md;
        	dp[i][1]=(dp[i-1][1]*9+dp[i-1][0])%md;
        }
        dp[n][0]=(dp[n-1][0]*8+dp[n-1][1])%md;
        if(n==1)dp[n][0]=8;
        System.out.println(dp[n][0]);
    }

}

Python:

dp = [[0 for j in range(1, 5)] for i in range(1, 1005)]
md = 12345
n = int(input())
dp[1][0]=9
dp[1][1]=1
for i in range(2,n):
    dp[i][0]=(dp[i-1][0]*9+dp[i-1][1])%md
    dp[i][1]=(dp[i-1][1]*9+dp[i-1][0])%md
dp[n][0]=(dp[n-1][0]*8+dp[n-1][1])%md
if(n==1) :
    dp[n][0]=8
print(dp[n][0])

Golang

package main

import "fmt"

func main() {
	var dp [1005][5]int
    n:=0
	md := 12345
    _, err := fmt.Scanf("%d", &n)
    if err != nil{
        
    }
	dp[1][0] = 9
	dp[1][1] = 1
    for i := 2; i < n; i++ {
		dp[i][0] = (dp[i-1][0]*9 + dp[i-1][1]) % md
		dp[i][1] = (dp[i-1][1]*9 + dp[i-1][0]) % md
	}
	dp[n][0] = (dp[n-1][0]*8 + dp[n-1][1]) % md
	if n == 1 {
		dp[n][0] = 8
	}
	fmt.Println(dp[n][0])

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号