/*
* 题目:连续子数组的最大和
* 输入一个整型数组,数组里有正数也有负数。
* 数组中一个或连续的多个整数组成一个子数
* 组。求所有子数组的和的最大值。
*eg: a[8]={1,-2,3,10,-4,7,2,-5}, OUT:{3,10,-4,7,2} 18
*
* 要求:时间复杂度为O(n);
*/
#include<stdio.h>
int maxsonC(int *a)
{
int i,j,max=0,tmp=0;
for(i=0;i<7;i++){
if(a[i]>0)
tmp=1;
}
if(tmp){
tmp =0;
for(i=0;i<7;i++){
if(tmp<0)
tmp=a[i];
else tmp+=a[i];
if(max<tmp)
max=tmp;
}
}
else {
i=0;max=a[i];
if(max<a[i]){
max=a[i];
i++;
}
}
return max;
}
int main(void)
{
int a[8]={1,-2,3,10,-4,7,2,-5};
int max=maxsonC(a);
printf("%d\n",max);
return 0;
}
/*
* 题目:在一个字符串中找到第一个不重复出现在该字符串中的字符并输出该字符
* eg: char a[10] = "abaccewkc"; out:b
*
* 要求:时间复杂度为O(n)
*
* 测试用列:全部重复字符串,全部不重复字符串,空字符串,溢出字符串(加个传参)
*
*/
#include<stdio.h>
char firstone(char *a)
{
int i;
char *pa=a;
int b[256];
for (i=0;i<256;i++){
b[i]=0;
}
while(*(pa)!='\0'){
b[*(pa++)]++;
}
i=0;
pa=a;
while(*(pa)!='\0'){
if(b[*pa]==1)
return *pa;
pa++;
}
return '\0';
}
int main(void)
{
char a[10] ="abaccewkc";
char p=firstone(a);
printf("%c\n",p);
return 0;
}
/*
*题目:输出迷宫全部成功路径
*
*详情:迷宫位一个n*n数组,其中2为迷宫的墙壁,0为不通的路径,
*1为可走的路径,5为终点和起点,3为走过的路径
*
* 测试用列:空迷宫,无终点迷宫,有交叉路线迷宫
*/
#include <stdio.h>
#include <stdlib.h>
int visit ( int, int );
int maze[7][7] = {{2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 2, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}
};
int startI = 1, startJ = 1; // 入口
int endI = 5, endJ = 5; // 出口
int success = 0;
int main ( void )
{
int i, j;
printf ( "显示迷宫:\n" );
for ( i = 0; i < 7; i++ )
{
for ( j = 0; j < 7; j++ )
if ( maze[i][j] == 2 )
printf ( "█" );
else
printf ( " " );
printf ( "\n" );
}
if ( visit ( startI, startJ ) == 0 )
printf ( "\n没有找到出口!\n" );
else
{
printf ( "\n显示路径:\n" );
for ( i = 0; i < 7; i++ )
{
for ( j = 0; j < 7; j++ )
{
if ( maze[i][j] == 2 )
printf ( "█" );
else if ( maze[i][j] == 1 )
printf ( "◇" );
else
printf ( " " );
}
printf ( "\n" );
}
}
return 0;
}
int visit ( int i, int j )
{
maze[i][j] = 1;
if ( i == endI && j == endJ )
success = 1;
if ( success != 1 && maze[i][j+1] == 0 ) visit ( i, j+1 );
if ( success != 1 && maze[i+1][j] == 0 ) visit ( i+1, j );
if ( success != 1 && maze[i][j-1] == 0 ) visit ( i, j-1 );
if ( success != 1 && maze[i-1][j] == 0 ) visit ( i-1, j );
if ( success != 1 )
maze[i][j] = 0;
return success;
}