1找一个整型数组中的第二大的数
例如: 66 , 66 , 66, 66,就没有第二大的数
99,98, 85,86,第二大的数就是98
编写程序如下:
#include<stdio.h>
//一个找数组中第二大值的函数
int func_find_max_2th(int arr[],int lenth)
{
int i=0, j=0, temp=0;
//冒泡排序法排序
for (i=0; i<lenth-1; i++)
{
for (j=0; j<lenth-1-i; j++)
{
if (arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//判断排序之后的首尾元素数值是否一样
if(arr[0] == arr[lenth-1])
{
printf("该数组种所有数都一样,没有第二大值");
return -1;
}
printf("该数组的第二大值是:%d \n",arr[lenth-2]);
}
int main(void)
{
int arr[5]={6,6,6,6,6};
func_find_max_2th(arr,5);
}
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;
hash ^= (uintptr_t)*s++;
printf("1---%ld.\n", hash);
if (*s == '\0')break;
hash ^= (uintptr_t)*s++<<8;
printf("2---%ld.\n", hash);
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);
return 0;
}
3 实现整数n(n<=10)的算式:n!+(n-1)!+(n-2)!…+3!+2!+1! 输入 n = 3:结果 3!+2!+1! = 9,函数原型:int jiecheng_sum(int n)
#include<stdio.h>
int jiecheng(int a)
{
int sum=1, i=0;
//参数的判断
if(a < 0| a > 10)
{
printf("参数输入错误");
return -1;
}
//递归的回归条件
if(1 == a)
{
return 1;
}
for(i=1; i<=a; i++)
{
sum = sum * i;
}
return sum + jiecheng(a-1);
}
int main(void)
{
int a =3, ret =0;
ret = jiecheng(a);
printf("ret= %d",ret);
}
4 如输入:Z2009-AShanghaiZ,则输出:lenth = 8;
事例说明:从A到Z的子串为SHanghai,其长度为8。
(这道题我只写了思路,实际代码运行时错误的!!)
#include<stdio.h>
#include<string.h>
int my_strlen(char *p)
{
int i = 0, j = 0, cnt = 0;
//计算字符串的长度
cnt = strlen(p);
//循环来找A这个字符
for(j=0; j<cnt; j++)
{
//找到A统计A到Z之间的字符个数
//如果这个字符的asc值是65
if('A' == p[j])
{
while(p[j] != 'Z')
{ //统计字符的个数 (多统计了一个A)
i++;
//下标移动
j++;
}
//把统计的A减掉
return i-1;
}
}
//如果找不到A 返回-1
return -1;
}
int main(void)
{
char str[] = "Z2009-AshanghaiZ";
printf("lenth=%d\n",my_strlen(str));
}
***
5 给出三个正整数a,b,c,你可以在他们之间插入加号或者乘号以及括号将其变成一个表达式,比如给出数字1,2,3,你可以构造出:
1+2*3=7
1*(2+3)=5
1 * 2 *3 =6
(1+2)*3=9
等表达式,现在你需要构造一个值最大的表达式,输出这个值
输入样例:123 输出:9
编写程序如下:
#include<stdio.h>
#define MAX(x,y) ((x>y)?x:y)
int func(int a, int b, int c)
{
int f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,f8=0;
int ret=0;
//把所有的组合全部排列出来
f1 = a*b*c;
f2 = a+b+c;
f3 = a*(b+c);
f4 = b*(a+c);
f5 = c*(a+b);
f6 = a+(b*c);
f7 = b+(a*c);
f8 = c+(a*b);
//比较得到最大的数
//第一轮比较
f1=MAX(f1,f2);
f2=MAX(f3,f4);
f3=MAX(f5,f6);
f4=MAX(f7,f8);
//第二轮比较
f1=MAX(f1,f2);
f2=MAX(f3,f4);
//第三轮比较
return ret=MAX(f1,f2);
}
int main(void)
{
int a=1, b=2, c=3, ret=0;
ret = func(a,b,c);
printf("输出:%d",ret);
}