输入一串乱序的数字和一个整数。
首先将其排序,再在这个有顺序的数字串中,找出所有两个数字之和等于那个整数的数对,并打印,如果没有,那么提示重新输入。
CODE:
#include <stdio.h>
#include <string.h>
char tab[ 200 ]; //存放数字串
int num; //输入的整数
int count = 0; //数字串的长度
void serial () //得到数字串
{
printf("请输入一串无序的数字,以回车结束:\n");
scanf("%s",tab );
}
void intnumber() //得到整数
{
printf("请输入一个整数:\n");
scanf("%d",&num);
}
void sort() //从小到大排序
{
int i = 0;
int j = 0;
char temp;
count = strlen(tab);
for ( j = 0; j < count - 1; j ++ ) //排序
{
for ( i = 0; i < count - 1 - j; i ++ )
{
if ( tab[ i ] > tab[ i + 1 ] )
{
temp = tab[ i + 1 ];
tab[ i + 1 ] = tab[ i ];
tab[ i ] = temp;
}
}
}
printf("由小到大排列后的数字串为:\n");
for ( i = 0; i < count; i ++ )
{
printf("%c",tab[ i ] );
}
}
void find() //寻找两个数字之和等于num
{
int i = 0;
int j = 0;
int flag = 0;
for ( j = 0; j < count - 1; j ++ )
{
for ( i = j + 1; i < count; i ++ )
{
if ( num == tab[ i ]-'0' + tab[ j ]-'0' ) // 减去'0'是为了将字符转为对应的整型数值
{
if (flag == 0)
printf("\n配对情况如下:\n");
printf(" %c + %c = %d \n", tab[ j ], tab[ i ], num );
flag = 1;
}
}
}
if ( flag == 0 )
printf("\n没有找到,请重新输入!");
}
void main()
{
serial();
intnumber();
sort();
find();
}