2021-11-25学习总结

今天没有学习新的算法,一直在刷acm题库和实验室的题库,以下是今天遇到的重点题目和知识点。

1.打印图形

描述

根据输入的数据打印相应的图形

格式

输入格式

输入一个n(1<=n<=20)(多组输入)

输出格式

输出相应的图形(每行最后一个数后没有空格)

样例输入

1
2
3
4
5

样例输出 

0
  0
1 2 3
    0
  1 2 3
4 5 6 7 8
      0
    1 2 3
  4 5 6 7 8
9 0 1 2 3 4 5
        0
      1 2 3
    4 5 6 7 8
  9 0 1 2 3 4 5
6 7 8 9 0 1 2 3 4		

思路分析: 这道题的主要分成两部输出,先输出空格,再输出数字。首先可以卡出,输出n行数据,然后看每一行的数据的个数,找规律可以发现第一行是一个数,从第二行开始,每一行数据的个数等于前一行的数据个数+2,因此定义一个计数器num,每往下一层,+2即可。并且定义一个count变量,赋0,表示输出的值,如果到10则变成重新从0开始。

然后就是前面的空格怎么输出,通过找规律可以得出,每一行的空格数等于n减去当前的行数。

代码实现:

#include<stdio.h>
int main()
{   int n,i,j;
    while(~scanf("%d",&n))
    {    int num=1,count=0;//num控制每一行的数据的个数
       for(i=1;i<=n;i++)
        {  for(j=i;j<=n-1;j++)
            printf("  ");
            for(j=0;j<num;j++)
              {printf("%d ",count++);
              if(count==10)count=0;}
              printf("\n");
              num+=2;
        }
    }
    return 0;
}

 

2. Spira

Spira 是一种螺旋,从 Spiral 演变过来的。废话不多说,蒜头君决定称如下的等腰直角三角形为 Spira:

1 2 3 4 5
12 13 14 6
11 15 7
10 8
9

这个是腰长为 55 的时候的样子。那么如果有其它腰长的 Spira 会是怎么样的呢?蒜头君想让你一个个画出来。

输入格式

第一行一个正整数 T(1 \le T \le 10)T(1≤T≤10),代表测试数据组数。

以下 TT 行,各行就一个正整数 N(2 \le N \le 1000)N(2≤N≤1000),代表三角形腰长。

输出格式

对于每个测试数据,输出相应的 Spira。每组数据之间以一个空行来间隔。

样例输入:

2
5
4

样例输出:

1 2 3 4 5
12 13 14 6
11 15 7
10 8
9

1 2 3 4
9 10 5
8 6
7

 思路分析:这道题的思路就是把输出分成三部分,上部分、斜部分和左部分,并且每次赋值之前要判断要赋值的位置是否有值。

代码实现:

#include<stdio.h>
int a[1010][1010];
int main()
{

    int i=0,j=0,n,T,k;
    scanf("%d",&T);
    while(T--)
    {  scanf("%d",&n);
       for(i=0;i<n;i++)
         for(j=0;j<n;j++)
          a[i][j]=0;
        i=0;j=0;k=1;
        a[i][j]=1;
        while(1)
        {
            if(k>=(n*(n+1)/2))break;
            while(j<n-1&&a[i][j+1]==0)
             a[i][++j]=++k;
             while(j>0&&a[i+1][j-1]==0)
                a[++i][--j]=++k;
             while(i>0&&a[i-1][j]==0)
                a[--i][j]=++k;
             while(j<n-1&&a[i][j+1]==0)
                a[i][++j]=++k;



        }
        for(i=0;i<n;i++)
        {for(j=0;j<n-i;j++)
          if(a[i][j]==0)printf(" ");
            else printf("%d ",a[i][j]);
            printf("\n");
        }
        printf("\n");

    }
    return 0;
}

 


3。精挑细选 

小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管。这听起来不算什么,但是这根钢管的要求可真是让他犯难了,要求如下:

  1. 这根钢管一定要是仓库中最长的;
  2. 这根钢管一定要是最长的钢管中最细的;
  3. 这根钢管一定要是符合前两条的钢管中编码最大的(每根钢管都有一个互不相同的编码,越大表示生产日期越近)。

相关的资料到是有,可是,手工从几百份钢管材料中选出符合要求的那根……要不,还是请你编写个程序来帮他解决这个问题吧。

输入格式

文件第一行为一个整数 n\ (1\le n \le 1000)n (1≤n≤1000),表示仓库中所有钢管的数量。

之后 nn 行,每行三个整数,分别表示一根钢管的长度(以毫米为单位,在 [1,10000][1,10000] 范围内)、直径(以毫米为单位,,在 [1,100][1,100] 范围内)和编码(一个 99 位整数)。

输出格式

只有一个 99 位整数,表示选出的那根钢管的编码。

样例输入:

4
3000 50 872198442
3000 45 752498124
2000 60 765128742
3000 45 652278122

样例输出: 

752498124

思路分析: 这道题的思路就是要嵌套If语句,定义结构体变量,注意编号的长度超过了int型,因此需要定义成long long型。

代码实现:

#include<stdio.h>
struct node{int length,slim;long long s;};
int main()
{  struct node num[1010];
   int i,j,n,max;
   scanf("%d",&n);
   for(i=0;i<n;i++)
    scanf("%d %d %lld",&num[i].length,&num[i].slim,&num[i].s);

    max=0;
    for(i=1;i<n;i++)
      if(num[i].length>num[max].length)max=i;//记录长度更长的
         else if(num[i].length==num[max].length)//如果长度一样,就比较粗细
              {  if(num[i].slim<num[max].slim)max=i;//记录更细的
                  else if(num[i].slim==num[max].slim)//如果粗细程度也一样的话,记录编号更大的
                       {  if(num[i].s>num[max].s)max=i;
                       }
              }
            printf("%lld",num[max].s);
            return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值