金字塔和吊丝的逆袭(水题)

一.目的

好久没写博客了,都不会写了,今天有那么刷题时,学习到了一些好的思路,给大家分享一下。

## 题目大意 ##

1.屌丝的逆袭
http://www.codevs.cn/problem/1400/
2.金字塔
http://codevs.cn/problem/1438/

二.解题思路

1.屌丝的逆袭:

因为该题要求前后左右人的魅力值总和最大的那个人的位置,该题给了范围,第一种思路就是你要考虑最左边,最右边,最上边和最下边的情况,因为这些都是特殊的位置,这样程序会很复杂。
另一种思路的解决方法,就是定义一个22*22的二维数组,给它初始化为0,并且让数组的i,j都从1开始到你输入的最大行列为止,这样相当于一个同心矩阵,最外一层是0,你所操作的是内层,这样你就不用考虑边界的情况,因为边界都是0。

>
2.代码

/*吊丝的逆袭*/

# include <stdio.h>
#define INEF 9999999

int main(void)
{
  int n,i,j,sum=0, m,k,l;
  int a[22][22]= {0};
  int max = -INEF;//因为要求最大的值,先初始化最小
  while(scanf("%d%d",&m, &n))
  {
     if(n==0 && m == 0)
       break;
    for(i = 1; i<=m; i++)
    {
       for(j = 1; j<=n; j++)
       {
         scanf("%d",&a[i][j]);
       }
    }
    for(i = 1; i<=m; i++)
    {
      for(j = 1; j<=n; j++)
      {
         if(a[i][j] > 0) sum = -a[i-1][j]-a[i+1][j]-a[i][j-1]-a[i][j+1];//性别不同相加绝对值,性别相同减去,
         if(a[i][j] < 0) sum =  a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1];//所以全加的效果都一样
       if(sum > max)
       {  max = sum;
         k = i;
         l = j;
       } 
      }   
    }
   printf("%d %d %d\n",k,l,max);
  }
  return 0;
}

3.金字塔

因为题目的要求是金字塔的两边对称,也可以用一个二位数组来解决,数组的行是你输入的数字,数组的列是你输入数字的二倍,然后给数组全都初始化为空格,然后从中间位置开始填充金字塔。
用一个变量来保存要输入下滑线的个数,在用一个变量来保存你每一行要填坑的最初位置,具体看代码。

4.代码

# include <stdio.h>

int main(void)
{
  int n;
  scanf("%d",&n);
  int sum = n*2;
  char a[n][sum];
  for(int i = 0; i<n; i++)
  {
    for(int j = 0; j<sum; j++)
    {
      a[i][j] = ' ';
    } 
  }
  int t = 0;//记录下划线的个数
  int j = n;//来记录填坑的最初位置
  for(int i = 0; i<n; i++)
  {
        j-=1;
        a[i][j] = '/';
        for(int k = j+1; k<t+j+1; k++)
        {   
          a[i][k] = '_';
        }
        a[i][t+j+1] = '\\';//输出反斜杠用这样
        t+=2;
  }
  for(int i = 0; i<n; i++)
  {
    for(int j = 0; j<n*2; j++)
    {
      printf("%c",a[i][j]);
    }
    printf("\n");
  }
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值