请问大神我这道题的算法错在哪里?

iweixiao 2018-01-31 10:51:25
【题目】
Description
一组长度大于3的数字序列,对于除了首尾两个数字,满足前后的数字都大于或都小于该数的数字叫做活跃数。
现在将一组序列加密为弓形矩阵,求解码后的序列有多少个活跃数。
Input
多组测试,输入矩阵的行数和列数分别为n,m,接着输入n*m个数字(2<=n,m<=20)
Output
输出一共有多少个活跃数。
Sample Input
3 2
1 2
4 3
5 6
Sample Output
0
HINT
解码后的序列为1 2 3 4 5 6,所以没有活跃数
【我的算法】
#include <stdio.h>
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
int i,j,k=0,a[20][20],b[400];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
if(i%2==0)
for(j=0;j<m;j++)
{
b[k]=a[i][j];
k++;
}
else
for(j=m-1;j>=0;j--)
{
b[k]=a[i][j];
k++;
}
int sum=0;
for(i=1;i<n*m-1;i++)
{
int tag1=1,tag2=1;
for(j=0;j<n*m;j++)
if(b[j]<=b[i]&&j!=i)
tag1=0;
for(j=0;j<n*m;j++)
if(b[j]>=b[i]&&j!=i)
tag2=0;
if(tag1||tag2)
sum++;
}
printf("%d\n",sum);
}
return 0;
}
...全文
794 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iweixiao 2018-02-01
  • 打赏
  • 举报
回复
引用 2 楼 liugc2008 的回复:
没跑过,我是看着,2<=n,m<=20,就这个条件,你的程序就不满足,ACM肯定通不过的。。。
啊? 应该怎么改? 我刚刚传了代码的截图,看得更清楚一些。。。
iweixiao 2018-02-01
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
怎么个加密?
就是原来是一个n*m的二维数组,解码的过程就是对其从上往下以“弓形”的方式读取 ,得到一个数字序列。
iweixiao 2018-02-01
  • 打赏
  • 举报
回复
烟袅许伊 2018-02-01
  • 打赏
  • 举报
回复
没跑过,我是看着,2<=n,m<=20,就这个条件,你的程序就不满足,ACM肯定通不过的。。。
真相重于对错 2018-02-01
  • 打赏
  • 举报
回复
怎么个加密?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧