算法——模拟

金币

题目描述

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容