牛客网刷题6(2道题)

12.字符串分隔

题目链接
https://www.nowcoder.com/practice/d9162298cb5a437aad722fccccaae8a7?tpId=37&&tqId=21227&rp=7&ru=/activity/oj&qru=/ta/huawei/question-ranking
题目描述
连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述
输出到长度为8的新字符串数组
示例1
输入
abc
123456789
输出
abc00000
12345678
90000000
题目分析

  1. 连续输入字符串:while(gets(str));
  2. 计算字符串长度:strlen(str);
  3. 如果字符串长度大于8,则要看字符串长度是8的几倍,然后每隔8个字符截取字符串:strncpy(arr,p,8);
  4. 如果字符串长度不足8,则看字符串长度对8取余后的长度,不足8的位数补0;
  5. 输出长度为8的字符串:fwrite(arr,1,8,stdout);
#include<stdio.h>
#include<string.h>
int main(){
	char str[100];
	int len,n;	
	while(gets(str)){
		char arr[8];
		char *p = str;
		len = strlen(str);
		n = len%8;	
		
		for(int i=0;i<len/8;i++){
			strncpy(arr,p,8);  //截取字符串 
			fwrite(arr,1,8,stdout);
			p += 8;
			printf("\n");
		}
		if(n!=0){
			strncpy(arr,p,n);
			for(int i=0;i<(8-n);i++){
				arr[n+i] ='0';
			}
			fwrite(arr,1,8,stdout);
			printf("\n");
		}
	}		
	return 0;
} 

13.扑克牌顺子

题目链接
https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4?tpId=13&&tqId=11198&rp=7&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
题目描述
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
题目分析

  1. 判断输入的数组是否为空,或者数组长度小于5;
  2. 排序;
  3. 排序后的数组找到数组中值不是0的下标,与此同时也找到了数组中0的个数。
  4. 遍历数组,判断数组中后一个元素与前一个元素的差值;
  5. 差值为0:不是顺子。
  6. 差值比1大:判断差值是否大于0的个数,大于则不是顺子。
  7. 其余情况是顺子。
function IsContinuous(numbers)
{
    if(numbers.length <5 || numbers == null)
        return false;
    var input = numbers.sort(function(a,b){
        return a-b;
    });
    var flag = 0;
    for(var i=0;i<input.length;i++){
        if(input[i] != 0){
            flag = i;
            break;
        }
    }
    for(var i=flag+1;i<input.length;i++){
        if(input[i]-input[i-1] === 0)
            return false;
        else if(input[i]-input[i-1] > 1){
            if(flag < input[i]-input[i-1]-1)
                return false;
            else
                flag -= input[i]-input[i-1]-1;
        }
    }
    return true;
}
发布了22 篇原创文章 · 获赞 0 · 访问量 371

猜你喜欢

转载自blog.csdn.net/weixin_41796393/article/details/104190870