第五次上机
目录
前言
自己写的上机作业,可以用于参考
目前处于初步学习中,写的不好见谅
一、题目
二、解题
1.思路
首先需要定义一个二维数组,每一行第一列为输入的数,第二列为该行第一列的数的各个位数和
我又单独定义了一个函数用于求一个数各个位数和
在数组中的数确定后,需要对每一行第二列的数进行大小比较并由高到低排序
注意这里排序是对整行进行重新排序
首先找到最大的放到第一行
其次找第二大的放到第二行
依此类推排序
最后输出排序后的结果即可
2.代码
代码如下(示例):
#include<stdio.h>
int main()
{
int n,a[1000][2];//定义二维数组
scanf("%d",&n);
int sum(int n);//函数声明
for(int i=0;i<n;i++)
{
scanf("%d",&a[i][0]);
a[i][1]=sum(a[i][0]);//将数输入到二维数组中
}
for(int j=0;j<n-1;j++)
{
for(int b,c,i=j+1;i<n;i++)//使用两个循环做大小的排序
{
if(a[j][1]<a[i][1])
{
b=a[j][1];c=a[j][0];
a[j][1]=a[i][1];a[j][0]=a[i][0];
a[i][1]=b;a[i][0]=c;//因为是整行的排序所以每行的两个元素都要交换位置
}
else if(a[j][1]==a[i][1])
{
if(a[j][0]>a[i][0])
{
b=a[j][1];c=a[j][0];
a[j][1]=a[i][1];a[j][0]=a[i][0];
a[i][1]=b;a[i][0]=c;//如果两个整数各位数字和相同,则先输出值较小的
}
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<2;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");//输出结果,每输出一行结果后换行
}
return 0;
}
int sum(int n)//定义了一个返回各个位数和的函数
{
int m=0;
do
{
m=m+n%10;
n=n/10;
}while(n!=0);
return m;
}