目录
写在前面
🎉🎉🎉哈喽!!!大家好,这里是禾子日月
🎆欢迎各位小伙伴关注➕点赞➕留言➕收藏
🎆我坚信努力奔跑才能与幸运不期而遇。
🎆🎉🎉🎉作者知识水平有限,若有什么错误或者需改进之处希望大家指出,若是你有更好的代码希望能给博主留言,博主希望能在CSDN与各位一起进步。
1、绝对值排序
题目描述
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
输入
输出
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
样例输入
3 3 -4 2
4 0 1 2 -3
0
样例输出
-4 3 2
-3 2 1 0
思路:因为数组中的数据既有正数又有负数,若直接比较则无法正确排序,所以我们要先将所有的数据转化成正数再排序,最后输出排序后的数据。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return abs(*(int*)a)<abs(*(int*)b);//abs()函数的功能是取绝对值
}
int main()
{
int n;
while(1){
scanf("%d",&n);
if(n==0)break;//判断n是否为0
int arr[n];
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
qsort(arr,n,4,cmp);//qort()函数包含在 #include<stdlib.h>头文件中
for(int i=0;i<n;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
return 0;
}
2、除法问题
题目描述
输入正整数n,遇到文件末尾结束。按从小到大顺序输出所有形如abcde/fghij=n的表达式,其中a到j恰好为数字0到9的一个排列(可以有前导0),无解输出“no answer”,n在2到79之间。
输入
一行输入一个整数n。
输出
形如abcde/fghij=n的表达式。
样例输入
62
样例输出
79546 / 01283 = 62
94736 / 01528 = 62
思路:从12345开始穷举到98765,若有符合的值直接输出,没有则结束。
代码如下:
#include<stdio.h>
int check(int i,int x)//判断是否存在这种数据
{
int a[10]={0};
int flag;
if(i%x==0)
{
int t=i/x;
if(t<10000)a[0]=1;
while(i){
a[i%10]=1;
i=i/10;
}
while(t){
a[t%10]=1;
t=t/10;
}
}
for(int i=0;i<10;i++){
if(a[i]!=1)
{
flag=0;
return flag;
}
}
flag=1;
return flag;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=12345;i<=98765;i++){
int ret=check(i,n);
if(ret==1&&i/n<10000)//前面需要加0的情况
{
printf("%d / 0%d = %d\n",i,i/n,n);
}
else if(ret==1&&i/n>10000)//前面不需要加0的情况
{
printf("%d / %d = %d\n",i,i/n,n);
}
}
if(count==0)printf("no answer\n");
return 0;
}
3、选举先进个人
题目描述
班上选K名先进个人,由同学们投票选出,现已按序号汇总N名同学(序号依次为1,2,…,N)所得到的投票数(已知每位同学的票数不同),按照得票数从高到低输出前K名同学对应的序号。
输入
第一行输入N和K,第二行依次输入这N名同学对应的票数。
输出
前K名同学的序号。
样例输入
10 3
18 19 20 5 15 12 13 16 21 23
样例输出
10 9 3
思路:定义两个数组,一个存放同学的次序,另一个存放该同学所获得的票数。然后按票数大小从大到小排序,最后输出前N名同学的次序。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int a[n],b[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);//存放同学票数
b[i]=i+1;//存放同学次序
}
for(int i=0;i<n;i++)
{
for(int j=1;j<n-i;j++)
{
if(a[j-1]<a[j])
{
int tmp=a[j-1];
a[j-1]=a[j];
a[j]=tmp;
int t=b[j-1];
b[j-1]=b[j];
b[j]=t;
}
}
}
for(int i=0;i<m;i++)printf("%d ",b[i]);
return 0;
}