【高分】C语言 Visual c++6.0环境下 编程题目 程序设计题目

求思路...函数过关 无思路 最好可以给出源码...三个源码都给出的追加100分..

1、(第一行是 10到99)

2、

3、

先回答第一题:给分了,有时间在看下面的

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i = 0, //数组下标
j = 0, //随机数值
k, //重新赋值数组的下标
temp; //冒泡排序交换变量
int n, //查找个数
len = 10, //每次新的数组的长度
index; //待查的数应该在的位置
int a[20], //原随机数的产生存放的数组
b[10]; //n个待找的数存放的数组,n<10

//产生随机数
srand ((int ) time(0));
for (i = 0; i <= 9; i++ )
{
j = rand() % 88 +10 ;
a[i] = j;
}
//冒泡法升序排序
for(i = 0; i < 10; i++)
for(j = 0; j < 9 - i; j++)
if(a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j + 1] = temp;
}
//升序输出
for (i = 0; i <= 9; i++ )
{
printf (" %d \t", a[i]);
}
//输入n待查找的数
printf ("请输入N值(输入个数):\t");
scanf ("%d", &n);
printf ("请分别输入%d个数:\n", n);
for (i = 0; i < n; i++ )
{
printf ("请输入第%d个数:\t", i + 1);
scanf ("%d", &b[i]);
}

//数组元素判断
for (i = 0; i < n; i++)
{
//判断在数组中的位置
for (j = 0; j < len; j++)
{
if (a[j] > b[i])
{
index = j;
break;
}
}
//若循环一轮完了,还未找到比b[i]大的,则b[i]最大
if (j == 10)
index = len;
//判断是否与数组元素相同
for (j = 0; j < len; j++)
{
if (b[i] == a[j])
{
a[j] = 0; //通过赋值为0,达到删除的效果
break;
}
}

/*说明:
通过上面的for来判断究竟是否有相同的元素,如果有就那么break跳出了,则j!=10,就可跳过下面的数组重新赋值了;
但如果没有那么j就会等于10那么就会重新赋值,而且前面也已经找到了b[i]应该在的位置,所以就行了
*/
//循环一轮,如果有不相同的元素,即j=len,则就重新赋值数组
if (j == len)
{
for (k = len - 1; k >= index; k--)
{
a[k + 1] = a[k];
}
a[index] = b[i];
len ++; //每一次如果有新元素了,就会把len加1,使数组加长
}
}

//输出最后数据,
for (i = 0; i < len; i++)
{
if (a[i] == 0) //为0则表示数据与原来相同,即要删除的数据
continue;
printf ("%d\t",a[i]);
}
return 0;
}

参考资料:自己编写

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-26
1.直接模拟得了...可以用计数排序!比如设一个10。。99的数组,你懂的!
2.动态规划吧!二维的方程f【i,j】,注意细节!
3.没给数据范围。。。(貌似是搜索!) 减支好麻烦!