算法竞赛前三章总结

第一章:程序设计入门
1.a/b 当a、b为整数时,结果向中间位置靠拢;例如: -8/5 结果为 -1 ;
2.浮点数使用%.3lf 输出; 另外: 整数-浮点数=浮点数 整数/浮点数=浮点数;
3.在竞赛中尽量使用const int 的形式来定义常量( 定义同时初始化); 在eclipse中定义目前最大为10位;
#define 好像最大也是10位的样子;

第二章:循环结构程序设计
1.找不出错误的时候,也可以使用输出中间结果的方法 ,来进行差错;
2.学会使用伪代码来初步编写程序! 可以适当使用汉字等, 之后将汉字部分改写成函数,进行调用即可。
例如:
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
if(aabb是完全平方数)
printf("%d",aabb); 之后将if()括号中内容,改写成函数调用。
这个有一点迭代式开发的意思,即每次只添加程序中的一小部分内容,保证正确性。
3.开平方可能会出现浮点误差, 有时可能会使用枚举平方根的操作,来避免开平方操作;
4.一个运算表达式的取余运算, 可以将取余操作设置到每一步计算的后面,结果不变;
5.scanf()返回值为成功输入的变量个数;

第三章:数组和字符串
1.memset(f,0,siziof(f)); 将数组f初始化为0;
2.最长回文子串:
这里解决了3个问题:首先是输入字符串中含空格,这里使用了fgets()函数;其次预处理得到不含标点且全为
大写的字符串;最后是:当判断当前子串为最大回文子串时,其在原来字符串中的位置不确定,这里新开一个数组
保存其原先的位置下坐标!
char f[N];
fgets(f,sizeof(f),stdin);
判断方法的改进:
枚举回文串的中间位置!然后不断向外扩展。
3.printf("%d %o %x\n",a,b,c); // 分别对应输出十进制,八进制,十六进制;
4.strchr 函数的功能:在一个字符串中查找一个字符。--------------(这个的应用在字符串题目中应该比较广泛了)
5.如果按照自己的方式处理字符串的时候,一定要保证字符串以 ‘\0’ 结尾!

例:蛇形填数如:
输入:
5
输出:
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5

#include<stdio.h>
#include<string.h>
int a[10000][10000];
int main()
{
 int n,x,y,tot=0;
 while(scanf("%d",&n)!=EOF)
 {
  x=0,y=n-1;
  memset(a,0,sizeof(a));
  tot=a[x][y]=1;
  while(tot<n*n)
  {
   while(x+1<n&&a[x+1][y]==0)
    a[++x][y]=++tot;
   while(y-1>=0&&a[x][y-1]==0)
    a[x][--y]=++tot;
   while(x-1>=0&&a[x-1][y]==0)
    a[--x][y]=++tot;
   while(y+1<n&&a[x][y+1]==0)
    a[x][++y]=++tot;
  }
  for(x=0;x<n;x++)
  {
   for(y=0;y<n;y++)
   {
    printf("%d ",a[x][y]);
   } 
   printf("\n");
  }
   
  }
  return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值