1、如输入:Z2009-AShanghaiZ
则输出:lenth = 8;
事例说明:从A到Z的子串为SHanghai,其长度是8.
//如输入:Z2009 - AShanghaiZ
//则输出:lenth = 8;
//事例说明:从A到Z的子串为SHanghai,其长度是8.
#include <stdio.h>
int func1(char arr[])
{
char *find_A = arr;//存储头指针,用于指向A
char *find_Z = arr;//存储头指针,用于指向B
while (*find_A++ != 'A');//指向A字符后一位
while (*find_Z++ != 'Z');//指向Z字符后一位
return (find_Z - 1 - find_A);
}
int main(void)
{
char arr[] = "abzd1-Axi'anZdef";
printf("%d", func1(arr));
return 0;
}
2、下面是某语言的计算字符串Hash值的算法如下,如果字符‘a’、‘b’对应的ascii的值对应十进制是97、98,
请回答控制台打印出的数值是多少_
typedef unsigned long uintptr_t;
uintptr_t NXStrHash (const void *data)
{
uintptr_t hash = 0;
unsigned char s = (unsigned char )data;
if (s)for (; ; )
{
if (*s == ‘\0’)break;//97
hash ^= (uintptr_t)*s++; //0110 0001
printf(“1—%ld.\n”, hash) //97
if (*s == ‘\0’)break; //98
hash ^= (uintptr_t)*s++<<8; //0110 0010 0110 0001
printf(“2—%ld.\n”, hash); //25185
if (*s == ‘\0’)break;
hash ^= (uintptr_t)*s++<<16;
printf(“3—%ld.\n”, hash);
if (*s == ‘\0’)break;
hash ^= (uintptr_t)*s++<<24;
printf(“4—%ld.\n”, hash);
}
return hash;
};
int main(void)
{
uintptr_t hash_value = NXStrHash(“ab”);
printf(“%ld.\n”, hash_value);//25185
return 0;
}
输出为:
1—97.
2—25185.
25185.
3、实现整数n(n<=10)的算式:n!+(n-1)!+(n-2)!…+3!+2!+1!
输入 n = 3:结果 3!+2!+1! = 11
函数原型:int jiecheng_sum(int n)
//3、实现整数n(n <= 10)的算式:n!+ (n - 1)!+ (n - 2)!... + 3!+ 2!+ 1!
//输入 n = 3:结果 3!+ 2!+ 1!= 11
//函数原型:int jiecheng_sum(int n)
#include <stdio.h>
int jiecheng_sum(int n)
{
int ret = 1, sum = 0, p = 0;
while (n > 0)
{
for (p = n,ret = 1; p > 0; p--)//计算n的阶乘
{
ret *= p;
}
sum += ret;//计算总和
n--;
}
return sum;
}
int main(void)
{
printf("%d\n",jiecheng_sum(3));
return 0;
}
4、一个数组有N个元素,使用冒泡排序对其进行排序输出
void func(int arr[], int N)
{
int i = 0, j = 0, buf = 0;
for (i = 0; i < N - 1; i++)
{
for (j = 0; j < N - 1 - i; j++)
{
if (arr[j] > arr[j + 1])//升序
{
buf = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = buf;
}
}
}
for (i = 0; i < N; i++)
{
printf("%d%c", arr[i],((i==(N-1))?'\n':' '));
}
}
int main(void)
{
//输入N个数
int N = 0;
printf("Input N:");
scanf("%d", &N);
//申请空间
int *arr = (int *)malloc(N * sizeof(int));
//输入元素
printf("Input every number:");
int i = 0;
for (i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
func(arr, N);
free(arr);
return 0;
}
5、给出三个正整数a,b,c,你可以在它们之间插入加号或者乘号以及括号将其变成一个表达式。现在需要构造一个值最大的表达式,输出这个值。
//思路:将三个数中较小的两个求出最大值,与第三个相乘
#include <stdio.h>
int func(int a, int b, int c)
{
int max = 0;
max = (a >= b ? (a >= c ? a : c) : (b >= c ? b : c));
if (1 == max)//输入的三个数字都是1
return a + b + c;
else if (a == max)
return (a*((b*c) >= (b + c) ? (b*c) : (b + c)));
else if (b == max)
return (b*((a*c) >= (a + c) ? (a*c) : (a + c)));
else if (c == max)
return (c*((a*b) >= (a + b) ? (a*b) : (a + b)));
else
printf("error");
}
int main(void)
{
int a = 0, b = 0, c = 0;
printf("Input 3 numbers:");
scanf("%d %d %d", &a, &b, &c);
printf("%d\n", func(a, b, c));
}