ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

新生22场

2022-01-20 16:35:04  阅读:182  来源: 互联网

标签:Copy 22 int 样例 新生 晨晨 文章 include


数字三角

中山市迎接2010年亚运会活动将要在兴中体育场举行,市教育局为每个学校安排了一个区域,每个学校的同学都要坐在自己学校的区域内。
分给成功小学的区域是个等边三角型,这不是不重视成功小学,而是把难题给了成功小学,就是因为成功小学的同学更加优秀,因此这点小问题是难不倒他们的。大家根据座位区域,一下就设计出了以下座位安排方案:

……
我们可以看出,1号同学应该坐第一排的第一个,它的座标是(1,1)。而8号同学在第四排的第二个,它的座标是(4,2)。
现在的问题是,我们怎么样才能知道任意一个同学到底坐在哪个座位上(即这个座位的座标)呢?
我想,这个问题可难不倒你,你能编写一个程序帮助成功小学的同学解决这个问题吗?
 

输入

输入一个整数N(1<=N<=32767),表示第N个同学。

输出

输出两个整数i,j,中间用一个空格隔开,表示第N个同学的座位在第i行的第j个位置。

样例输入 Copy

5

样例输出 Copy

3 2
这题和新生19场的数字三角形很像啊,但我不明白为什么有的时候数据就是输不出来,程序直接停掉,很奇怪啊,这个我也就是在那个代码的基础上修改了一下
#include<iostream>
using namespace std;
int a[5050][5050];
int main(){
    int k=1;
    a[1][1]=1;
    for(int i=2;i<=5000;i++)
    {
        a[i][1]=a[i-1][1]+k;
        for(int j=2;j<=i;j++)
        {
            a[i][j]=a[i][j-1]+1;
        }
        k++;
    }
   int n;
   cin>>n;
   for(int i=1;i<=5000;i++)
   {
       for(int j=1;j<=i;j++)
       {
           if(a[i][j]==n)
               cout<<i<<" "<<j<<endl;
       }
   } 
   return 0;
}

 铺地砖:

题目描述

一天,晨晨的数学老师布置了一道题目,大意如下:用1×1和2×2的磁砖不重叠地铺满n×3的地板,共有多少种方案?
例如:n=1时:1×3的地板方法就一个,直接由三个1×1的磁砖铺满。
      n=2时:2×3的地板可以由下面3种方案铺满:

输入

第一行:一个整数n(1≤n≤100)。

输出

输出铺满n×3的地板的方案数。

样例输入 Copy

3

样例输出 Copy

5

提示

对于20%的数据,1≤n≤15;
对于50%的数据,1≤n≤30;
对于100%的数据,1≤n≤100; 这题是个显然的递推,用到加法和乘法原理: 把这个地板看成是有3列,第一列只有一种铺法,即3个1*1的,第二列有三种,即一种是两三个1*1和一个2*2,这样左右有两种和6个1*1,一共两种 第三列看成第一列加第二列铺出来的 第四列看成第二列和第三列铺出来的 第五列... 所以递推式就是f[n]=f[n-1]+f[n-2]*2(一列只有一种,两列会有两种) 这题的数据规模很大哦,到100,而这种递推式是呈指数型爆炸式的增长,自然用到高精度,用一个二维数组(有借鉴洛谷)
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int n,f[5010][5010],len;
void min(int k)
{
    for(int i=1; i<=len; i++)
        f[k][i]=f[k-1][i]+f[k-2][i]*2;
    for(int i=1; i<=len; i++)
        if(f[k][i]>=10)
        {
            f[k][i+1]+=f[k][i]/10;
            f[k][i]%=10;
            if(f[k][len+1]>0)len++;
        }
}
int main()
{
    cin>>n;
    len=1;
    f[1][1]=1;
    f[2][1]=3;
    for(int i=3; i<=n; i++)
        min(i);
    for(int i=len; i>=1; i--)
        cout<<f[n][i]<<endl;
    return 0;
}

阅读训练:

一天晨晨在做阅读训练。她拿了一本包括n篇文章的小说集,第i篇文章包括bi (1≤bi≤100)页,已知晨晨每读一页都要花一分钟。假设晨晨开始阅读小说第一页的时间起点为0,她读第一篇文章从时间点0到时间点b1-1,第二篇文章从时间点b1到时间点b1+b2-1,依此类推…,阅读第n篇文章的时间点b1+b2+…+bn-1到时间点b1+b2+…+bn-1+bn-1。那么,当在时间点t时(0≤t<阅读总时间),你知道晨晨在阅读第几篇文章吗?
其实晨晨的好奇心比你还强,虽然阅读还未正式开始,但她很想知道在未来Q个时间点时,自己分别会在阅读哪一篇文章?
严重偏文科的晨晨,感觉这个问题很棘手,就想请你这个电脑高手帮忙。
例如:如果一本书包括三篇文章:第一篇文章2页,第二篇文章1页,第三篇文章3页,那么时间点与所读文章(序号)的关系如下图所示:

输入

第一行:包括空格分开的两个整数N和Q (其中1≤n≤100,1≤Q≤1000) 。
接下来的N行,每行一个整数代表每篇文章的页数。
再接下来是Q行,每行一个整数代表一个时间点。

输出

总共Q行,每行一个数,代表按输入顺序的每个时间点正在阅读的文章序号。
 

样例输入 Copy

3 5
2
1
3
2
3
4
0
1

样例输出 Copy

2
3
3
1
1
这题真的挺考验的循环的??最简单的思路就是开个b数组初始化,然后直接需要什么找什么就好了,初始化的过程需要注意以下
#include<iostream>
using namespace std;
const int N=10010;
int a[N],b[N];
int main(){
    int n,m,t;
    cin>>n>>m;
    for(int i=0;i<n;i++)
        cin>>a[i];
    int z=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<a[i];j++)
        {
            b[z++]=i+1;
        }
    }
    for(int i=0;i<m;i++)
    {
        cin>>t;
        cout<<b[t]<<endl;
    }
    return 0;
}

 

标签:Copy,22,int,样例,新生,晨晨,文章,include
来源: https://www.cnblogs.com/ccwz7/p/15825896.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有