本文纯属自创,转载请注明出处!
如发现代码有问题请留言
1.删除重复的数值
描述: 将一个整型数组中的各个值进行比对,删除重复的数值,并向前对齐。
运行时间限制: 10 Sec
内存限制: 128 MByte
输入: 多行,每行一组数据,用“,”隔开,其最大长度小于4096个字符。
输出: 多行,每行对应删除重复后的结果。
样例输入: 3,5,4,5,3
9,9,10,2,3,10,21,2,10
样例输出: 3,5,4
9,10,2,3,21
代码如下(自创):
-
#include <stdio.h>
-
-
#define N 2
-
#define M 10
-
-
int main(void)
-
{
-
int n;
-
int s;
-
int i = 0;
-
int j, k;
-
int a[N][M] = {
-
{3, 5, 4, 5, 3},
-
{9, 9, 10, 2, 3, 10, 21, 2, 10, 6}
-
};
-
int flen[N], llen[N];
-
-
for (i=0; i<N; i++)
-
{
-
j = M;
-
while(j>=0 && a[i][--j]==0);
-
flen[i] = j+1;
-
}
-
-
printf("输入:\n");
-
-
for (i=0; i<N; i++)
-
{
-
for (j=0; j<flen[i]; j++)
-
{
-
printf("%d ", a[i][j]);
-
}
-
printf("\n");
-
}
-
-
for (k=0; k<N; k++)
-
{
-
n = 0;
-
while(n<flen[k])
-
{
-
s = a[k][n];
-
i = n;
-
while(i<flen[k]){
-
while(a[k][++i] == s)
-
{
-
for (j=i; j<flen[k]; j++)
-
{
-
a[k][j] = a[k][j+1];
-
}
-
flen[k]--;
-
}
-
}
-
n++;
-
}
-
llen[k] = flen[k];
-
-
}
-
-
printf("\n输出:\n");
-
-
for (i=0; i<N; i++)
-
{
-
for (j=0; j<llen[i]; j++)
-
{
-
printf("%d ", a[i][j]);
-
}
-
printf("\n");
-
}
-
-
return 0;
-
}
2.分数转小数
描述: 写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。
如:1/3 = 0.33333333... 则循环节为3 输出为0.(3)
运行时间限制: 无限制
内存限制: 无限制
输入: 函数原型:
int Calculate(const int numerator, const int denominator ,char *decimaltostring)
输入参数:
int numerator 分子
int denominator: 分母
输出: 输出参数:
char * decimaltostring: 存放计算结果。
样例输入: 1
3
样例输出: 0.(3)
答案提示: 限制小数部分的最大位数为100位。
如果本来是无限循环小数,但循环节大于100位,认为不是循环小数,直接输出。
3.最大数
描述: 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数。
输入: 10个小于10的数字:
1 2 3 4 5 6 7 8 9 0
输出: 输出最大三位数
987
样例输入:1 2 3 4 5 6 7 8 9 0
样例输出:987
算法思路:
先随机输出10个整数,范围[0,9];
然后删除数组中重复数字;方法同第一题
最后取数组最大的一个数,放入另一个数组,再从剩下的数据中取最大的那个,以此类推。新的数组就是最大的三位数。
代码如下(自创):
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<time.h>
-
-
#define N 3
-
int main(void)
-
{
-
int s, i, j, k, m;
-
int n = 0;
-
int count = 0;
-
int length;
-
int num[10];
-
int maxnum[N];
-
-
length = sizeof(num)/sizeof(int);
-
-
printf("输入10个小于10的数字:\n");
-
srand((unsigned int)time(NULL));
-
for(i=0; i<length; i++)
-
{
-
num[i] = rand()%10;
-
printf("%d ",num[i]);
-
}
-
printf("\n去重:\n");
-
-
while(n<length)
-
{
-
s = num[n];
-
i = n+1;
-
while(i<length)
-
{
-
while(num[i++] == s)
-
{
-
for(j=(--i); j<length; j++)
-
{
-
num[j] = num[j+1];
-
}
-
length--;
-
}
-
}
-
n++;
-
}
-
-
for(i=0; i<length; i++)
-
{
-
printf("%d ", num[i]);
-
}
-
-
for(i=0; i<N; i++)
-
{
-
m=0;
-
maxnum[i] = num[0];
-
for(j=1; j<length; j++)
-
{
-
if(num[j]>maxnum[i])
-
{
-
maxnum[i]=num[j];
-
m = j;
-
}
-
}
-
if(m==length-1)
-
{
-
num[m] = 0;
-
}
-
else
-
{
-
for(k=m; k<length-1; k++)
-
{
-
num[k] = num[k+1];
-
}
-
length--;
-
}
-
}
-
-
printf("\n最大的三位数:\n");
-
-
for(i=0; i<3; i++)
-
{
-
printf("%d",maxnum[i]);
-
}
-
printf("\n\n");
-
-
return 0;
-
}
4.奇偶排序
描述: 输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序。
运行时间限制: 10 Sec
内存限制: 128 MByte
输入: 输入一串乱序的数字。
输出: 输出排序后的数字。
样例输入:12 34 5 7 92 3 8
样例输出:7 5 3 8 12 34 92
算法思想:
输入一串乱序的数字放入数组,并统计实际长度;
将奇数和偶数分别放如两个不同的数组;
使用冒泡排序法分别排序;
整合输出;
代码如下(自创):
-
#include <stdio.h>
-
-
-
#define MAX 1000
-
#define SWAP(x,y) {int t; t = x; x = y; y = t;}
-
-
void sort_maxtomin(int array[], int len);
-
void sort_mintomax(int array[], int len);
-
-
int main(void)
-
{
-
int i=0;
-
char status;
-
int length=0, blen = 0, slen = 0;
-
int num[MAX] = {0};
-
int odd[MAX] = {0};
-
int even[MAX] = {0};
-
-
do
-
{
-
printf("请输入一个非负整数数字: ");
-
status = scanf("%d", &num[i]);
-
i++;
-
}while(status);
-
-
length = i-1;
-
-
for(i=0; i<length; i++)
-
{
-
printf("%2d ", num[i]);
-
}
-
for(i=0; i<length; i++)
-
{
-
if(num[i]%2 == 1)
-
{
-
odd[blen]=num[i];
-
blen++;
-
}
-
else
-
{
-
even[slen]=num[i];
-
slen++;
-
}
-
}
-
-
sort_maxtomin(odd, blen);
-
sort_mintomax(even, slen);
-
-
printf("\n");
-
for(i=0; i<blen; i++)
-
{
-
num[i] = odd[i];
-
num[blen+i] = even[i];
-
}
-
printf("\n");
-
for(i=0; i<slen; i++)
-
{
-
num[blen+i] = even[i];
-
}
-
-
for(i=0; i<length; i++)
-
{
-
printf("%2d ", num[i]);
-
}
-
-
return 0;
-
}
-
-
void sort_maxtomin(int array[], int len)
-
{
-
int i, j;
-
for(i=0; i<len-1; i++)
-
{
-
for(j=len-1; j>i; j--)
-
{
-
if(array[j]>array[j-1])
-
{
-
SWAP(array[j], array[j-1]);
-
}
-
}
-
}
-
}
-
-
void sort_mintomax(int array[], int len)
-
{
-
int i, j;
-
for(i=0; i<len-1; i++)
-
{
-
for(j=len-1; j>i; j--)
-
{
-
if(array[j]<array[j-1])
-
{
-
SWAP(array[j], array[j-1]);
-
}
-
}
-
}
-
}
阅读(1091) | 评论(0) | 转发(0) |