数字排序
题目6:数字排序
问题描述
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
样例输入
5
101 100 999 1234 110
样例输出
999 27
1234 10
101 2
110 2
100 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过10000的非负整数。
#include <stdio.h>
struct Num{
int q;
int sum;
};
int main(){
struct Num p[50];
int n,i = 0,j,f[50];
scanf("%d",&n);
for(i = 0;i<n;i++){
int sum = 0;
scanf("%d",&p[i].q);
f[i] = p[i].q;
while(f[i]!=0){
sum = sum +f[i]%10;
f[i] = f[i]/10;
}
p[i].sum = sum;
}
struct Num temp;
for(i=0;i<n-1;i++){
for(j=i;j<n;j++){
if(p[i].sum<p[j].sum){
temp = p[i];
p[i] = p[j];
p[j] = temp;
}else if(p[i].sum==p[j].sum){
if(p[i].q>p[j].q){
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
for(i = 0;i<n;i++){
printf("%d %d\n",p[i].q,p[i].sum);
}
return 0;
}
整数转换为字符串
用递归法将一个整数n转换成字符串。
输入格式:输入一个整数
输出格式:输出一串字符串
输入样例一:123(整数)
输出样例一:123(字符串)
输入样例二:-456(整数)
输出样例二:-456(字符串)
#include <stdio.h>
void change(int n);
int main(){
int n;
scanf("%d",&n);
if(n<0){
printf("-");
n = -n;
}
change(n);
return 0;
}
void change(int n){
int i;
if((i=n/10)!=0){
change(i);}
putchar(n%10+'0');
}
累加和校验
标题
累加和校验
类别
流程控制
时间限制
1S
内存限制
256Kb
问题描述
数据传输中一种常见的校验方式是累加和校验。其实现方式是在一次通讯数据包的最后加入一个字节的校验数据。
这个校验字节内容为前面数据包中所有数据按字节累加所得结果的最后一个字节。例如:
要传输的信息为: TEST(ASCII码为0x54,0x45,0x53,0x54)
四个字节的累加和为:0x54+0x45+0x53+0x54=0x140
校验和为累加和的最后一个字节,即0x40,也就是十进制的64
现在请设计一个程序计算给出的待传输信息的累加校验和
输入说明
输入为一个字符串,字符串长度不超过100个字符
输出说明
输出一个十进制整数,表示输入字符串的累加校验和。
输入样例
TEST
输出样例
64
#include <stdio.h>
int main(){
char s[100];
gets(s);
int sum = 0;
for(int i=0;s[i]!='\0';i++){
sum = sum+s[i];
}
printf("%d",sum&0xFF);
return 0;
}