程序设计与算法(一)C语言程序设计CAP 第十周
2018-01-22 20:15
344 查看
1:成绩排序
查看提交
统计
提问
总时间限制:
1000ms
内存限制:
65536kB
描述
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
输入
第一行为n (0 < n < 20),表示班里的学生数目;
接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。
输出
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
样例输入
4 Kitty 80 Hanmeimei 90 Joey 92 Tim 28
样例输出
Joey 92 Hanmeimei 90 Kitty 80 Tim 28
#include <iostream> #include<cstring> using namespace std; struct student { char name[20]; int score; } students[30]; int main() { int n; cin>>n; for(int i=0 ; i<n; ++i) cin>>students[i].name>>students[i].score; for( int j=0 ;j<n ; ++j) for( int i=0 ; i<n-j ; ++i) { if(students[i].score<students[i+1].score || students[j].score==students[j+1].score && strcmp(students[j].name,students[j+1].name)>0)//成绩相同时名字长的排在前面 { student temp; temp=students[i]; students[i]=students[i+1]; students[i+1]=temp; } } for (int i=0 ;i<n ;++i) cout << students[i].name << " " << students[i].score << endl; return 0; }
注解:两个同类型的结构变量,可以互相赋值,但不能进行比较运算。结构的成员变量可以是任何类型的。在使用冒泡算法进行排序时循环调节也可以改变为一下语句
for(int i=size-1; i>0; i--) { for(int j=0; j<i; j++) { if(students[i].score<students[i+1].score) { student temp; temp=students[i]; students[i]=students[i+1]; students[i+1]=temp; } } }
结构体的作用相当于声明一个结构类型,他的作用相当于C语言自定的结构类型,所以在声明一个中间变量时使用 student temp;语句。
2:分数线划定
查看提交
统计
提问
总时间限制:
1000ms
内存限制:
65536kB
描述
世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
输入第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的志愿者人数。输入数据保证m*150%向下取整后小于等于n。第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤
100)。数据保证选手的报名号各不相同。
输出第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。
样例输入
6 3 1000 90 3239 88 2390 95 7231 84 1005 95 1001 88
样例输出
88 5 1005 95 2390 95 1000 90 1001 88 3239 88
提示样例说明:m*150% = 3*150% = 4.5,向下取整后为4。保证4个人进入面试的分数线为88,但因为88有重分,所以所有成绩大于等于88的选手都可以进入面试,故最终有5个人进入面试。
#include <iostream> #include<cstring> using namespace std; struct student { int id; int score; } students[100]; int main() { int n,m; //n,m分别表示参赛人数和录取人数 cin>>n>>m; for(int i=0 ; i<n; ++i) cin>>students[i].id>>students[i].score; for( int j=0 ;j<n ; ++j) for( int i=0 ; i<n-j ; ++i) { if(students[i].score<students[i+1].score || students[i].score==students[i+1].score && students[i].id>>students[i+1].id)//成绩相同时名字长的排在前面 { student temp; temp=students[i]; students[i]=students[i+1]; students[i+1]=temp; } } int k=m*1.5; int j=0; int liness=students[k].score; for(int i=0 ;i<n;++i) { if( students[i].score >= liness) ++j; } cout<<liness<<" "<<j<<endl; for( int i=0 ; i<j ;++i ) cout<<students[i].id<< " "<<students[i].score<<endl; return 0; }
3:病人排队
查看提交
统计
提问
总时间限制:
1000ms
内存限制:
65536kB
描述
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
1. 老年人(年龄 >= 60岁)比非老年人优先看病。
2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3. 非老年人按登记的先后顺序看病。
输入第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
输出按排好的看病顺序输出病人的ID,每行一个。
样例输入
5 021075 40 004003 15 010158 67 021033 75 102012 30
样例输出
021033 010158 021075 004003 102012
#include <iostream> #include <cstring> using namespace std; struct Patient{ char id[20]; int age; int No; } patients[110]; bool priority( Patient p1, Patient p2) { if(p1.age>=60 && p2.age<60) return 1; if(p1.age<60 && p2.age>=60) return 0; if(p1.age<60 &&p2.age<60) return p1.No < p2.No; if(p1.age>=60 && p2.age>=60) return p1.age > p2.age; } int main() { int n; cin >> n; for(int i=0; i<n; ++i) { cin >> patients[i].id >> patients[i].age; patients[i].No = i; } for(int i=n-1; i>=0; --i) for(int j=0; j<i; ++j) if(priority(patients[j+1], patients[j])) { Patient tmp; tmp = patients[j]; patients[j] = patients[j+1]; patients[j+1] = tmp; } for(int i=0; i<n; ++i) cout << patients[i].id << endl; return 0; }
*4:mysort
查看提交
统计
提问
总时间限制: 1000ms 内存限制: 65536kB描述程序填空题,自己编写排序函数 mysort,使得其能够对任意类型的数组排序#include <iostream>
using namespace std;
struct A {
int nouse1;
int nouse2;
int n;
};
// 在此处补充你的代码
int MyCompare1( const void * e1,const void * e2)
{
int * p1 = (int * ) e1;
int * p2 = (int * ) e2;
return * p1 - * p2;
}
int MyCompare2( const void * e1,const void * e2)
{
int * p1 = (int * ) e1;
int * p2 = (int * ) e2;
if( (* p1 %10) - (* p2 % 10))
return (* p1 %10) - (* p2 % 10);
else
return * p1 - * p2;
}
int MyCompare3( const void * e1,const void * e2)
{
A * p1 = (A*) e1;
A * p2 = (A*) e2;
return p1->n - p2->n;
}
int a[20];
A b[20];
int main ()
{
int n;
while(cin >> n) {
for(int i = 0;i < n; ++i) {
cin >> a[i];
b[i].n = a[i];
}
mysort(a,n,sizeof(int),MyCompare1);
for(int i = 0;i < n; ++i)
cout << a[i] << "," ;
cout << endl;
mysort(a,n,sizeof(int),MyCompare2);
for(int i = 0;i < n; ++i)
cout << a[i] << "," ;
cout << endl;
mysort(b,n,sizeof(A),MyCompare3);
for(int i = 0;i < n; ++i)
cout << b[i].n << "," ;
cout << endl;
}
return 0;
}
输入多组数据。每组数据以整数 n开头(n<10),然后是n个整数输出对每组数据,输出三行。
第一行是整数从小倒大排序的结果
第二行是按个位数从小到大排序的结果(如果个位数相同,小的排在前面)
第三行还是整数从小倒大排序的结果样例输入
5 21 3 76 48 445 6 73 29 45 8737 2 1样例输出
3,21,48,76,445, 21,3,445,76,48, 3,21,48,76,445, 1,2,29,45,73,8737, 1,2,73,45,8737,29, 1,2,29,45,73,8737,
int mysort(void* a, int n, int w, int(*compare)(const void* e1, const void* e2)) { char* s = (char*)a; for(int i=i i<n; ++i) for(int j=0; j<n-i; ++j) { char* p1 = (char*)a+j*w; char* p2 = (char*)a+j*w+w; if(compare(p1,p2) > 0) { for(int k=0; k<w; ++k) { char tmp = p1[k]; p1[k] = p2[k]; p2[k] = tmp; } } } }
5:从字符串中取数
查看提交
统计
提问
总时间限制: 1000ms内存限制: 65536kB描述编写GetDoubleFromString函数,该函数可以不断从字符串中取出正浮点数或整数,无数可取,则返回值小于0
#include <iostream> #include <iomanip> using namespace std; double GetDoubleFromString(char * str) {
// 在此处补充你的代码
} int main() { char line[300]; while(cin.getline(line,280)) { double n; n = GetDoubleFromString(line); while( n > 0) { cout << fixed << setprecision(6) << n << endl; n = GetDoubleFromString(NULL); } } return 0; }
输入多组数据,每组数据一行
输出针对每组数据,将其中的数输出来。每行一个数,保留小数点后面6位。输入数据中只会有正数,不用考虑负号。两个数之间有至少一个非数字非小数点的字符。
样例输入
please 121a1 stand 0.7 9.2 1010.3983 0.00001 black stand what 1324.3 12.34 45 78ab78.34
样例输出
121.000000 1.000000 0.700000 9.200000 1010.398300 0.000010 1324.300000 12.340000 45.000000 78.000000 78.340000
static char* p; if(str) p = str; double num = 0; while(*p && !(*p>='0'&&*p<= '9')) ++p; if(*p == 0) return -1; while(*p>='0' && *p<='9') { num = num*10+*p-'0'; ++p; } if(*p == '.') { ++p; double i = 10; while(*p>='0' && *p<='9') { num += (*p-'0')/i; ++p; i *= 10; } } return num;
相关文章推荐
- 程序设计与算法(一)C语言程序设计CAP 第五周
- 程序设计与算法(一)C语言程序设计CAP 第三周编程作业
- 程序设计与算法(一)C语言程序设计CAP 第四周
- 程序设计与算法(一)C语言程序设计CAP 第七周
- 程序设计与算法(一)C语言程序设计CAP 第一周
- 程序设计与算法(一)C语言程序设计CAP 第二周编程作业
- 程序设计与算法(一)C语言程序设计CAP 第六周
- c语言程序设计第三次上机实验报告
- pcap_dump()所保存.cap文件格式
- OpenCV故障cap_ffmpeg_impl.hpp--001
- NOSQL数据模型和CAP原理
- CAP和最终一致性
- 第十周项目2(从简单起)-计算1/2+2/3+3/4+...+19/20的值
- 第十周 用三种循环语句求1000以内所有偶数的和
- 第十周上机实践------1+1/2+1/3+++++++++++1/20
- 第十周项目三——乘法口诀表
- 第十周
- rails 4.0 中使用 cap 发布的时候,出现 LD_LIBRARY_PATH 没有设置的问题 的解决办法
- Java Card CAP组件分析——Header Component
- 分布式系统中的CAP理论