2019.1.31 自主训练日志

    训练第十一天,今天收获颇丰,先来说一下51nod上AC的题目,好事成双、字典序。代码就不展示了,算法简单,属中下难度的题目,相较与那些一眼看上去就会的题目有许多细节上的要求,好事成双的解题思路就是输入数组,然后依次遍历,比较数量关系,计数。但是输入数组长度并不确定,题目中说的是以输入0为结束标志,可在输入样例中并没有0,所以这困扰了我很久,最后试着提交了一遍,才发现输入样例是错的    (눈_눈),忍不住要吐槽出题者。然后是字典序,首先输入一个二维字符数组,依次判断第一行与第二行的大小关系,如果相同标志变量flag为1,第一行大于第二行flag=0并跳出循环,如果第一行小于第二行flag=1并跳出循环,按flag不同输出YES或NO。在解题过程中,一开始并没有分离出最后一种情况,而是将其与相等时的情况合并,重置标志变量的值,这样做的坏处是如果在小于的字符之后还有大于的情况,那么标志变量就被改变了,进而影响输出结果。另外,如何提取字符串中的字符一直都是我的软肋,今天也得到了解决,使用gets语句配合strlen函数对单一字符串中的字符进行调用操作。伪代码如下
char str1[10001],str2[10001];
int a,b,flag = 1;
gets(str1);
gets(str2);
a = strlen(str1);
b = strlen(str2);
if(a<b)
	swap(a,b);
for(int i = 0;i<a;i++)
{
	if(str1[i]==str2[i])
	{
		flag = 1;
	}
	if(str1[i]<str2[i])
	{
		flag = 1;
		break;
	}
	if(str1[i]>str2[i])
	{
		flag = 0;
		break;
	}
}
    除此以外,今天在看完了编程珠玑的第一章,学到了一个很实用的排序方法——位向量数据结构,可用一个 20 位长的字符串来表示一个所有元素都小于 20 的简单的非负整数集合。例如,可以用如下字符串来表示集合{1,2,3,5,8,13}:0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0代表集合中数值的位都置为1,其他所有的位都置为0。表面上这种方法只是用于元素至多出现一次的数组排序,但实际上还有很多应用角度,只不过以我现在的能力水平不足以实现,明天可以考虑写一下位运算。看懂一点是一点。
    现在想好了,摁住一本书读就行了,不会的地方就去学,以编程珠玑这本书的知识结构为参照,不断去补齐自己的知识空白。
      明天一切照旧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值