6.视频编解码。16进制的数存储,加些简单的判断(开头判断,结尾判断,中间舍去部分判断)。
#include "stdio.h"
int main(){
int T,k,x=0,y=0,tmp=0;
scanf("%d",&T);
int res[10000],ns[T];
for(k=0;k<T;k++){
int n,i,start=0,t=0;
scanf("%d",&n);
int nums[n];
for(i=0;i<n;i++){
scanf("%x",&nums[i]);
}
for(i=0;i<n-3;i++){
if(start==5 && nums[i-2]==0 && nums[i-1]==0 && nums[i]==03 && nums[i+1]==0){
continue;
}
if(nums[i]==0 && nums[i+1]==0 && nums[i+2]==01 && start==0){
start=1;
}
if(nums[i]==0 && nums[i+1]==0 && nums[i+2]==01 && start==5){
start=0;
}
if(start>=1 && start<=4){
start++;
}
if(start==5){
res[x]=nums[i];
x++;
t++;
}
}
ns[k] = t;
}
for(k=0;k<T;k++){
for(y=0;y<ns[k];y++){
printf("%x ",res[y+tmp]);
}
tmp += ns[k];
printf("\n");
}
}
7.不重复最长子串长度。也是状态转移,一个变量指在子串左边,一个在右边移动。另外用一个数组存位置和判断值是否存在。
#include "stdio.h"
#define max(a,b) ((a)>(b)?(a):(b))
int main(){
int T,k;
scanf("%d",&T);
int res[T];
for(k=0;k<T;k++){
int l1,i,tmp,ml=0,left=0,m=0;
char s[100],asc[26];
scanf("%s",&s);
for(l1=0;s[l1]!='\0';++l1);
for(i=0;i<26;i++){
asc[i]=-1;
}
for(i=0;i<l1;i++){
tmp = s[i]-97;
if(asc[tmp]==-1 || asc[tmp]<left){
asc[tmp]=i;
}else{
left=asc[tmp]+1;
asc[tmp]=i;
}
m = max(i-left+1,m);
}
res[k]=m;
}
for(k=0;k<T;k++){
printf("%d\n",res[k]);
}
}
8.二进制位数和等于十进制位数和。这边就暴力的每个算过来判断是不是这种数。
#include "stdio.h"
int judge(n){
int b=n,tmp=0;
while(b!=0)
{
tmp+=b%2;
b=b/2;
}
b=n;
while(b!=0){
tmp-=b%10;
b=b/10;
}
if(tmp==0){
return 1;
}else{
return 0;
}
}
int main(){
int T,k;
scanf("%d",&T);
int result[T];
for(k=0;k<T;k++){
int n,i,res=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
res+=judge(i);
}
result[k]=res;
}
for(k=0;k<T;k++){
printf("%d\n",result[k]);
}
}
9.买卖交易。这个和leetcode上有个讲股票买卖的差不多,就每次后面比前面大的话就卖出买入就可以。
#include "stdio.h"
int calc(int *nums,int n){
int i,res=0;
for(i=0;i<n-1;i++){
res += nums[i+1]>nums[i]?nums[i+1]-nums[i]:0;
}
return res;
}
int main(){
int T,k,n,i;
scanf("%d",&T);
int res[T];
scanf("%d",&n);
int nums[n];
for(k=0;k<T;k++){
for(i=0;i<n;i++){
scanf("%d",&nums[i]);
}
res[k] = calc(nums,n);
}
for(k=0;k<T;k++){
printf("%d\n",res[k]);
}
}
10.二叉树右视图,主要还是用先序构建二叉树,右视图的话就是右子树优先遍历即可。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct BiTNode{
ElemType data;
struct BiTNode*lChild, *rChild;
}BiTNode, *BiTree;
int i=0,maxdepth=0,al=0;
int res[100],nums[100];
int CreateBiTree(BiTree *T,char *s)
{
ElemType ch;
ch = s[i];
i++;
if(ch=='#'){
*T = NULL;
}else{
*T = (BiTree)malloc(sizeof(BiTNode));
if (!(*T)) exit(-1);
(*T)->data = ch-'0';
CreateBiTree(&(*T)->lChild,s);
CreateBiTree(&(*T)->rChild,s);
}
return 1;
}
void calc(BiTree T, int depth){
if(depth>maxdepth){
res[maxdepth+al] = T->data;
maxdepth = depth;
}
if(T->rChild!=NULL) calc(T->rChild, depth+1);
if(T->lChild!=NULL) calc(T->lChild, depth+1);
}
int main(void)
{
int t,k,all=0;
scanf("%d",&t);
BiTree T;
for(k=0;k<t;k++){
i=0;
T = NULL;
maxdepth=0;
char s[1000];
scanf("%s",&s);
CreateBiTree(&T,s);
calc(T,1);
al+=maxdepth;
nums[k]=maxdepth;
}
for(i=0;i<t;i++){
for(k=0;k<nums[i];k++){
printf("%d",res[k+all]);
}
all+=nums[i];
printf("\n");
}
}
版权声明:本文为原创文章,转载请注明出处和作者,不得用于商业用途,请遵守
CC BY-NC-SA 4.0协议。
赞赏一下
支付宝打赏
微信打赏