美文网首页
算法——模拟

算法——模拟

作者: Airjoden | 来源:发表于2019-02-12 17:01 被阅读0次

金币

题目描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1N+1N+1天里,每天收到N+1N+1N+1枚金币。

请计算在前KKK天里,骑士一共获得了多少金币。
输入输出格式

输入格式:

一个正整数KKK,表示发放金币的天数。

输出格式:

一个正整数,即骑士收到的金币数。

输入样例:
6
输出样例:
14

自己的理解:

#include<stdio.h> 
int main()
{ 
    int n; //表示第几天
    scanf("%d",&n); 
    int add=1; 
    int ans=0; 
    while(n>0) \\判断天数大于0天
    { 
        if(n>=add) \\判断剩余天数是否大于连续的天数
        { 
            n-=add; //将剩余天数减去连续的天数 
            ans+=add*add; \\将连续天数的金钱加起来
        }
        else
        { 
            ans+=add*n; n-=add; //将不足与连续天数的金钱加起来
        } 
        add++; //连续的天数自增
    } 
    printf("%d",ans); 
    return 0; 
}

神奇的幻方

题目描述

幻方是一种很神奇的 N∗NN∗N 矩阵:它由数字 1,2,3,⋯⋯,N×N1,2,3,⋯⋯,N×N 构成,且每行、每列及两条对角线上的数字之和都相同。

当 NN 为奇数时,我们可以通过下方法构建一个幻方:

首先将 11 写在第一行的中间。

之后,按如下方式从小到大依次填写每个数 K(K=2,3,⋯,N×N)K(K=2,3,⋯,N×N) :

1.若 (K−1)(K−1) 在第一行但不在最后一列,则将 KK 填在最后一行, (K−1)(K−1) 所在列的右一列;

2.若 (K−1)(K−1) 在最后一列但不在第一行,则将 KK 填在第一列, (K−1)(K−1) 所在行的上一行;

3.若 (K−1)(K−1) 在第一行最后一列,则将 KK 填在 (K−1)(K−1) 的正下方;

4.若 (K−1)(K−1) 既不在第一行,也最后一列,如果 (K−1)(K−1) 的右上方还未填数,则将 KK 填在 (K−1)(K−1) 的右上方,否则将 LL 填在 (K−1)(K−1) 的正下方。

现给定 NN ,请按上述方法构造 N∗NN∗N 的幻方。
输入格式

输入文件只有一行,包含一个正整数 NN ,即幻方的大小。
输出格式

输出文件包含 NN 行 ,每行 NN 个整数,即按上述方法构造出的 N∗NN∗N 的幻方,相邻两个整数之间用单空格隔开。

#include<stdio.h> 
#include<string.h>
int main()
{
    int n; 
    scanf("%d",&n);  //输入几阶方阵
    int num[n][n]; 
    memset(num,0,sizeof(num)); //初始化num矩阵
    num[0][n/2]=1;  //使第一行中间列为1
    int x=0,y=n/2;  //当前位置
    for(int i=2;i<=n*n;i++)  
    { //四个判断条件,其中一种分成两种
        if(x==0&&y!=n-1){x=n-1; y++;} 
        else if(x!=0&&y==n-1)   {y=0; x--;}
        else if(x==0&&y==n-1)   {x++;}
        else if(num[x-1][y+1]==0)   {x--; y++;}
        else    {x++;} 
        num[x][y]=i;  //赋值给当前位置
    } 
    for(int i=0;i<n;i++)
    { 
        for(int j=0;j<n;j++)
        {
            printf("%d ",num[i][j]); 
        } 
        if(i!=n-1)  //每n个换一行
            printf("\n"); 
    } 
    return 0;
}

题目描述

小南有一套可爱的玩具小人, 它们各有不同的职业。

有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:

玩具谜题

这时singer告诉小南一个谜題: “眼镜藏在我左数第3个玩具小人的右数第1个玩具小人的左数第2个玩具小人那里。 ”

小南发现, 这个谜题中玩具小人的朝向非常关键, 因为朝内和朝外的玩具小人的左右方向是相反的: 面朝圈内的玩具小人, 它的左边是顺时针方向, 右边是逆时针方向; 而面向圈外的玩具小人, 它的左边是逆时针方向, 右边是顺时针方向。

小南一边艰难地辨认着玩具小人, 一边数着:

singer朝内, 左数第3个是archer。

archer朝外,右数第1个是thinker。

thinker朝外, 左数第2个是writer。

所以眼镜藏在writer这里!

虽然成功找回了眼镜, 但小南并没有放心。 如果下次有更多的玩具小人藏他的眼镜, 或是谜題的长度更长, 他可能就无法找到眼镜了 。 所以小南希望你写程序帮他解决类似的谜題。 这样的谜題具体可以描述为:

有 n个玩具小人围成一圈, 已知它们的职业和朝向。现在第1个玩具小人告诉小南一个包含m条指令的谜題, 其中第 z条指令形如“左数/右数第s,个玩具小人”。 你需要输出依次数完这些指令后,到达的玩具小人的职业。
输入输出格式
输入格式:

输入的第一行包含两个正整数 n,m,表示玩母具小人的个数和指令的条数。

接下来 n 行,每行包含一个整数和一个字符串,以逆时针为顺序给出每个玩具小人的朝向和职业。其中 0 表示朝向圈内,1 表示朝向圈外。 保证不会出现其他的数。字符串长度不超过 10 且仅由小写字构成,字符串不为空,并且字符串两两不同。整数和字符串之间用一个空格隔开。

接下来 m 行,其中第 i 行包含两个整数 ai,si,表示第 i 条指令。若 ai=0,表示向左数 si 个人;若 ai=1,表示向右数 si个人。 保证 ai​ 不会出现其他的数,1≤si<n。

输出格式:

输出一个字符串,表示从第一个读入的小人开始,依次数完 m 条指令后到达的小人的职业。

输入样例:
7 3
0 singer
0 reader
0 mengbier
1 thinker
1 archer
0 writer
1 mogician
0 3
1 1
0 2
输出样例:
writer

#include<stdio.h> 
int main()
{
    int n, m; 
    scanf("%d%d", &n, &m);  //输入玩具小人个数和游戏指令次数
    int dirt[n]; //储存玩具小人的面向
    char name[n][20]; //储存玩具小人的名字
    
    for(int i = 0; i < n; i++)
    {  //依次输入玩具小人的面向和名字
        char x; 
        scanf("%d", &dirt[i]);  
        scanf("%c", &x); //将把数字与名字之间的空格读入吸收 
        scanf("%s", name[i]); 
    } 
    int cur = 0; //当前走到的小人
    for(int i = 0; i < m; i++)
    { 
        int a, b; 
        scanf("%d%d", &a, &b); 
        if(a + dirt[cur] == 1) { cur += b; }
        else { cur -= b; } 
        if(cur < 0) { cur += n; }  //防止越界
        else if(cur >= n) { cur -= n; } 
    } 
        printf("%s", name[cur]); 
        return 0; 
}

相关文章

  • 第六章 更多监督训练

    介绍Lunar Lander示例 监督训练没有训练集 使用遗传算法 使用模拟退火算法 遗传算法和模拟退火算法的训练...

  • 数学建模

    1.启发式算法 它主要包括禁忌搜索,模拟退火,遗传算法,神经网络,蚁群算法 模拟退火算法 Metropolis准则...

  • Simulated Annealing (SA) Algorit

    1 模拟退火算法(Simulated Annealing Algorithm)介绍    模拟退火算法是一种通用概...

  • 猪都能飞起来才算风口,AI是猪吗?

    ​​​ 近年来,随着一系列基础算法的快速突破,如模拟人类思维的神经网络算法,遗传算法,强化学习算法,模拟退火算法,...

  • TSP问题—蚁群算法(ACO)

    TSP问题—蚁群算法(ACO) 蚁群算法(AG)是一种模拟蚂蚁觅食行为的模拟优化算法,它是由意大利学者Dorigo...

  • 2018-11-14

    昨天学习了模拟退火算法以及一个小智力题:海盗分赃~ 模拟退火算法前先看了爬山算法,爬山算法是一种简单的贪心搜索算法...

  • 数学建模最常用的数学算法

    1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟可以来检验自己模型的...

  • 算法——模拟

    金币 题目描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收...

  • 模拟退火算法

    1.概念 介绍模拟退火前,请先了解爬山算法。因为模拟退火算法是爬山算法的改进版,它在爬山算法的基础上引入了随机化。...

  • 2019-01-28

    Local Search 常用的local search 算法有 爬山算法, 模拟退火算法, 遗传算法和禁忌查找等...

网友评论

      本文标题:算法——模拟

      本文链接:https://www.haomeiwen.com/subject/veqosqtx.html