请高手帮忙,要解题思路或者是代码,最好c语言。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请高手帮忙,要解题思路或者是代码,最好c语言。相关的知识,希望对你有一定的参考价值。

打字游戏(game)
学校组织了一场打字游戏比赛,该游戏开始后会不断从屏幕的上方掉下标有数字的气球,如果在气球坠入屏幕最下方之前按下气球上对应的数字键,则该气球就会被击破(屏幕上方掉下来有数字的气球最多为500个)。当游戏结束后,屏幕中会显示出该选手击破的气球上的所有数字,这些数字按被击破的先后顺序组成的数字串即为游戏者的比赛得分,得分最高者比赛胜出。作为裁判的小卡卡需要按照选手的比赛得分,按从大到小的顺序给每位选手排列名次。得分最高的选手名字排在第一行,而得分最低的选手名字排在最后一行。
请你帮助小卡卡编程完成。
输入:共2*N+1行。第一行是一个1到500的整数N,表示总共有N位比赛选手。以下2*N行依次给出每位选手的信息。每位选手的信息都由两行组成。第一行为选手的名字,名字由26个英文字母组成,名字的长度在1~50之间。第二行为一个由一连串的数字所组成的数字串,表示该名选手的得分,该得分的长度在0~500位之间。
输出:共N行。依次输出按得分从高到低排好序的各位选手的名字,每个名字占据单独的一行。若几个名字的得分相同,则按名字的字典顺序先后排列。
样例:输入:(game.in)
6
Sedgewick
56541313484613131997132131312121
Parberry
31646431316464313131644979791313
Polya
6794313013464644313131313131
Motwani
13134949746416265468652
Gonzalez
1651644987436132164646499413131
Moret
1613131464613131313519
输出:(game.out)
Sedgewick
Parberry
Gonzalez
Polya
Motwani
Moret
限制: 50%的数据得分长度在0~10之间,1<N<10。
80%的数据得分长度在0~100之间,1<N<100。
100%的数据得分长度在0~500之间,1<N<500。

//用C++提交
// 这题要用大整数来做的。自己定义大整数比较方法
#include <stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<time.h>
#include<string.h>
using namespace std;
const int MAX=555;
struct BigNum//定义大整数

int dig[MAX];//大整数的每一位
int len;//大整数长度
void Clr()

memset(dig,0,sizeof(dig));
len=1;

;
struct STU

char name[MAX];
BigNum scr;
stu[MAX];
BigNum deal(char s[])

BigNum ret;
int i,j;
ret.Clr();
for(i=0,j=strlen(s)-1;s[i];i++,j--)

ret.dig[j]=s[i]-'0';

ret.len=i;
return ret;

int NumCmp(BigNum a,BigNum b)

int i;
if(a.len>b.len)return 1;//a的长度大
else if(b.len>a.len)return -1;//b长度大
//长度一样的情况
for(i=a.len;i>0;i--)

if(a.dig[i]!=b.dig[i])return a.dig[i]-b.dig[i];//找到第一个不一样的,返回

return a.dig[i]-b.dig[i];

bool cmp(STU a,STU b)//定义比较规则

return NumCmp(a.scr,b.scr)>0;

int main()

int n,i;
char tmp[MAX];
while(scanf("%d",&n)!=EOF)

for(i=0;i<n;i++)

scanf("%s%s",stu[i].name,tmp);
stu[i].scr=deal(tmp);//把数字倒转一下.这样比较起来方便


sort(stu,stu+n,cmp);
for(i=0;i<n;i++)puts(stu[i].name);

return 0;
参考技术A 给个思路你吧,如果要代码我再给你写
首先可以用一个char类型的二维数组保存名字,一个char类型的二维数组保存分数
当输入完成后判断
先判断分数的字符串长度最长的就是最高分,如果长度相同,就比较第一个字符,大的就高分,否则低分,如果相等,那么就继续比较第二个字符串,以此类推。如果两个字符串完全相等,那么就比较名字的字符串,比较字母的大小。
那样就能排个续出来了,然后打印
参考技术B 标准C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct st

char name[51] ;
char sc[501] ;
st ;

st a[501] ;

int comp( const void *a , const void *b )

if( strlen( ((st *)a)->sc ) != strlen( ((st *)b)->sc ) )
return strlen( ((st *)b)->sc ) - strlen( ((st *)a)->sc ) ;
return strcmp( ((st *)b)->sc , ((st *)a)->sc ) ;


int main()

//freopen("in.txt","r", stdin) ;
int n , i ;

scanf("%d", &n ) ;

for( i = 0 ; i < n ; ++i )

scanf("%s%s", a[i].name , a[i].sc ) ;


qsort( a , n , sizeof(a[0]) , comp ) ;

for( i = 0 ; i < n ; ++i )
puts( a[i].name ) ;

return 0 ;

C语言文件操作,请高手指点

我学C一学期了,期末老师叫我们做一个学生信息管理系统,我其他都做好了,就是不会写文件操作....我努力尝试了,但还是不行....我想问:文件操作是C里面的难点吗?请高手给我指点迷津!不胜感激!

操作文件首先要打开文件,文件在C中是由一个FILE的结构表示的,所以先要定义一个FILE类型的指针:
FILE *pFile;
然后调用fopen函数打开文件,fopen定义如下:
FILE *fopen(
const char* filename,
const char* mode
);
第一个参数是文件的全路径名,注意如果文件叫C:\Test.txt,那么写的时候应该写成"C:\\Text.txt"。因为'\'在C中是转义的意思,所以要写两个。第二个参数是打开的方式,如果是写的话可以用"w",或者"a"。前者会清楚文件中的原有内容重新写,后者会在原有内容中追加。
返回值是一个FILE类型的指针。

语句就是类似于这样:
pFile = fopen("C:\\Test.txt","w");

这样就打开了一个文件。这个文件就有pFile表示。
写文件的函数是
size_t fwrite(
const void* buffer,
size_t size,
size_t count,
FILE* stream
);
第一参数是要写的内容的指针。第二个内容是要写的内容的单位字节数,比如你要写个"HelloWorld".其实就是写10个char类型。那么第二个参数就是sizeof(char)。第三个参数是要写多少个单位。对于这个例子就是10个字符。所以就是10。第四个参数是要写的文件的指针。
返回值是实际写的单位数。

所以语句是:
假设之前有定义:char* buffer="HelloWorld";
fwrite(buffer,sizeof(char),10,pFile);
这样就完成了写文件了。
最后使用完文件,要关闭文件:fclose(pFile);

再给你一个微软MSDN上的例子,你参考一下:
/* FREAD.C: This program opens a file named FREAD.OUT and
* writes 25 characters to the file. It then tries to open
* FREAD.OUT and read in 25 characters. If the attempt succeeds,
* the program displays the number of actual items read.
*/

#include <stdio.h>

void main( void )

FILE *stream;
char list[30];
int i, numread, numwritten;

/* Open file in text mode: */
if( (stream = fopen( "fread.out", "w+t" )) != NULL )

for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
/* Write 25 characters to stream */
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );


else
printf( "Problem opening the file\n" );

if( (stream = fopen( "fread.out", "r+t" )) != NULL )

/* Attempt to read in 25 characters */
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );

else
printf( "File could not be opened\n" );

Output

Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb

参考资料:MSDN

参考技术A 不是难点,你到网上搜一下谭浩强的那本书,上面就有,比较简单,好像是《C语言基础》

以上是关于请高手帮忙,要解题思路或者是代码,最好c语言。的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题Python实现玩牌高手真题+解题思路+代码(2022&2023)

华为OD机试真题Java实现玩牌高手真题+解题思路+代码(2022&2023)

无向图中求两定点之间所有路径。图用二维数组存储。最好用c语言、给我解题思路也行。谢谢

C语言详解:函数递归专题

求这个c语言题目的解题思路和解法?

想将一个编好的存放在windows系统中的C语言代码复制到linux虚拟机的vi编译环境中,哪位高手能帮忙实现