11、爬台阶 ——递归方法
有一个n层的楼梯,你一次可以爬1层或者2层,请问有多少种爬楼梯的方法? 要求输入n,输出方法的数量
#include<stdio.h>
int sum(int n){
if(n==1){
return 1;
}
if(n==2){
return 2;
}
return sum(n-1)+sum(n-2);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d级台阶有%d种方法",n,sum(n));
return 0;
}
12、两数之和
给定一个整数列表 nums 和一个整数目标值 target,请你在该列表中找出和为目标值 target 的那两个整数,并返回它们的列表下标。
你可以假设每种输入只会对应一个答案。但是,列表中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
未解决:没能实现输入一组数组。
已解决:while循环输入,以判断回车作为结束符号
while(1&&i<MAX){
scanf("%d",&nums[i++]);
char c = getchar();
if (c == '\n') {
break;
}
}
#include<stdio.h>
int main()
{
int nums[1000],target,n=0;
while((scanf("%d",&nums[n])!=EOF){
n++;
}
target=nums[n];
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
if(nums[i]+nums[j]==target){
printf("%d=%d+%d",target,nums[i],nums[j]);
}
}
}
return 0;
}
13、无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
思路:遍历。记录每次不重复的第一个字符下标p,从p开始到第i个依次判断是否和第i个字符相等,找到后记录新的p,并得到新的最大长度。
字符串处理#include<string.h>。获得字符串长度strlen(s)
#include<stdio.h>
#include<string.h>
int max(int a,int b){
return a>b?a:b;
}
int maxlength(char * s){
int len=strlen(s);
if(len<2)return len;
int m=1,ch=s[0],p=0;
for(int i=1;i<len;i++){
for(int j=p;j<i;j++){
//p是上一个判断相同的字符下标。
if(s[j]==s[i]){
//这里从p开始往后依次和第i个字符判断是否相同。
m=max(m,i-p);//两个相同字符下标之差就是本次找到的无重复字符串长度
p=j+1;
}
}
}
m=max(m,len-p);
return m;
}
int main()
{
char s[1000],k[1000];
scanf("%s",&s);
int max;
max=maxlength(s);
printf("%d",max);
return 0;
}