按数字和大小依次输出各数
输入n个正整数(1<n<=10),然后按照每个数的数字和(取该数的各位数字相加)的大小,从大到小输出这n个数(如果其中有几个数的数字和相同,则这几个数按其输入时的先后顺序输出)
输入格式:
先输入n;
再输入n个正整数
输出格式:
按数字和的大小从大到小输出这n个数,数与数之间用“,”进行分隔。
输入样例:
10
1 2 3 4 5 11 12 13 21 22
输出样例:
5,4,13,22,3,12,21,2,11,1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
以下是C语言的代码实现:
#include <stdio.h>
#include <stdlib.h>
// 计算数字和
int digit_sum(int n)
{
int sum = 0;
while (n)
{
sum += n % 10;
n /= 10;
}
return sum;
}
// 比较函数,用于排序
int cmp(const void *a, const void *b)
{
int x = *(int*)a, y = *(int*)b;
int sum_x = digit_sum(x), sum_y = digit_sum(y);
if (sum_x != sum_y) return sum_y - sum_x; // 按数字和从大到小排序
else return x - y; // 如果数字和相同,按输入时的先后顺序排序
}
int main()
{
int n, i;
int a[10];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp); // 使用快速排序算法排序
for (i = 0; i < n; i++)
{
printf("%d", a[i]);
if (i != n - 1) printf(",");
}
return 0;
}
首先定义了一个函数 digit_sum
,用于计算一个数的数字和。然后定义了一个比较函数 cmp
,用于排序。在 cmp
函数中,先计算两个数的数字和,如果数字和不同,则按数字和从大到小排序;如果数字和相同,则按输入时的先后顺序排序。最后使用 qsort
函数进行排序。
在主函数中,先读入输入的数列,然后调用 qsort
函数进行排序。最后按照排序后的顺序输出数列中的数,数与数之间用逗号进行分隔。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
2也是质数,不要遗忘
#include <stdio.h>
int prime(int x){
int i;
for(i=3;i*i<x;i+=2)
if(x%i==0)
return 0;
return 1;
}
int main() {
int i;
int j;
int N;
scanf("%d",&N);
if(N>=2){
printf("2\n");
}
for(i=3; i<=N; i+=2){
if(prime(i)){
printf("%d\n",i);
}
}
return 0;
}
你可以用冒泡实现,执行时间和效率都很不错:
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 10
int digits_sum(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
int main() {
int n;
scanf("%d", &n);
int nums[MAX_N];
int sums[MAX_N];
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
sums[i] = digits_sum(nums[i]);
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (sums[j] > sums[i] || (sums[j] == sums[i] && j < i)) {
int temp_sum = sums[i];
sums[i] = sums[j];
sums[j] = temp_sum;
int temp_num = nums[i];
nums[i] = nums[j];
nums[j] = temp_num;
}
}
}
for (int i = 0; i < n; i++) {
printf("%d", nums[i]);
if (i != n - 1) {
printf(",");
}
}
printf("\n");
return 0;
}
供参考:
#include <stdio.h>
#define N 11
int s(int n)
{
int s = 0;
while(n) {
s += n % 10;
n /= 10;
}
return s;
}
int main()
{
int a[N], n, i, j, t;
scanf("%d", &n);
for (i = 0;i < n; i++) //输入
scanf("%d", &a[i]);
for (i = n - 1;i > 0; i--) // 排序
{
for (j = 0; j < i; j++)
if (s(a[j]) < s(a[j+1]))
{
t = a[j]; a[j] = a[j+1]; a[j+1] = t;
}
}
for (i = 0;i < n; i++) // 输出排序后的数组
printf(i ? ",%d" : "%d", a[i]);
return 0;
}