由于疫情原因,网络复试,6道编程题。

/*1、输入2个正整数m和n(1<=m,n<=1000),输出m和n之间所有满足各位数字的 立方和等于它本身的数。(15分)*/
#include<stdio.h>
int main(){
   
	int m,n,i,j;
	scanf("%d %d",&m,&n);
	if(m<1||m>1000||n<1||n>1000){
   
		return 0;
	}
	for (i=m;i<=n;i++){
   
		for (j=1;j<=10;j++){
   
			if (i==j*j*j){
   
				printf("%d ",i);
			}
		}
	}
	return 0;
} 
//2、编写一个程序,找出最大素数,素数只能被1和自身除尽的数。(15分)
//输入:100 输出:97
#include<stdio.h>
#include<math.h>
int main(){
   
	int x,i,j;
	printf("请输入取值范围:");
	scanf("%d",&x);
	for(i=x;i>1;i--){
   
		for(j=2;j<=sqrt(x);j++){
   
			if(i%j==0){
   
				break;
			}
			if(j>sqrt(x)-1){
   
				printf("范围内最大素数为%d",i);
				return 0;
			}
		}
	} 
	return 0;
}
//3、编写程序计算1!+2!+3!+……+n!的值,其中n是键盘输入。(15分) 
#include<stdio.h>
int main(){
   
	int i,j,n;
	int sum=1,total=0;
	printf("请输入一个数n:");
	scanf("%d",&n);
	for (i=1;i<=n;i++){
   
		sum = 1;
		for (j=1;j<=i;j++){
   
			sum *= j;
		}
		total += sum;
	}
	printf("%d",total);
	return 0;
}
/*4、输入一个长度为10的数组,输出连续整数之和的最大值。例如: 输入:2,-3,5,-3,2,4,-6,3,1,1 输出:8(因为5+(-3)+2+4=8)(15分) */
#include<stdio.h>
int sum(int array[],int n){
   
	int i,j,sum=0,maxSum=0;
	for (i=0;i<n;i++){
   
		sum = 0;
		for (j=i;j<n;j++){
   
			sum += array[j];
			if (sum>maxSum){
   
				maxSum = sum;
			}
		}
	}
	return maxSum;
}
int main(){
   
	int N;
	int array[] = {
   2,-3,5,-3,2,4,-6,3,1,1};
	N = sum(array,10);
	printf("最大子序列和:%d",N);
	return 0;
}
/*5、编写一个程序,输入一个长度不超过100的字符串,并删除字符串中重复的 字符。(20分) 样例输入:abacaeedabcdcd 样例输出:abced */
#include<stdio.h>
#include<string.h>
int main(){
   
	char str[100];
	char n[100];
	int i,j,k,flag;
	gets(str);
	for (i=0;str[i]!='\0';i++){
   
		flag = 1;
		for (j=0;j<i;j++){
   
			if (str[i]==n[j]){
   
				flag = 0;
			}
		}
		if (flag){
   
			n[k++] = str[i];
		}
	}
	n[k] = '\0';
	puts(n);
	return 0;
} 

第六题在规定时间复杂度下目前我还做不出来

/*6、假设一整箱数组存在若干正数和负数,现在通过某种算法使得数组的所有负数 在正数的左边,且保证 负数和正数间元素相对位置不变,时间复杂度要求分为o(n) ,空间复杂度要求为o(1),不能使用辅助数组(20分)。 */
#include <stdio.h>
int sort(int *v, int len)
{
   
	if (NULL == v || len <= 0){
   
		return -1;
	}
	int i,j,k,begin,end,temp;
	for(i = 0; i < len; ++ i){
   
		k = i;//0
		while(v[k] < 0){
   
			++k;
		}
		begin = k;//0
		while(v[k] >= 0){
   
			++k;
		}
		end = k;//1
		if (end > len-1){
   
			break;
		}
		temp = v[end];//2
		for(j=end;j>begin;--j)
		{
   
			v[j] = v[j-1];
		}
		v[begin] = temp;		
	}
	return 0;
}
void print(const int *v, int len)
{
   
	printf("Items AS : ");
	unsigned int i;
	for (i=0; i<len; ++i){
   
		printf("%d ", v[i]);
	}
	printf("\n");
}
int main()
{
   
	int v[] = {
   -5, 2, -3, 4, -8, -9, 1, 3, -10};
	int len = sizeof(v) / sizeof(v[0]);
	print(v, len);
	sort(v, len);
	print(v, len);
	return 0;
}