编程网格若干题目
更新时间:2023-08-26 13:52:01 阅读量: 教育文库 文档下载
- 数控编程网格怎么编推荐度:
- 相关推荐
题目 - 日历问题 ................................................................................................................................ 1
题目 - 生日相同 ............................................................................................................................. 3
题目 - 开关灯 ................................................................................................................................. 5
题目 -出现次数超过一半的数 ....................................................................................................... 6
题目 - 谁考了第k名 .................................................................................................................... 8
题目 - 区间合并 ........................................................................................................................... 9
题目 - 距离排序 ......................................................................................................................... 11
题目 - 吃糖果问题 ..................................................................................................................... 14
题目- 采药 ................................................................................................................................... 15
题目- 辉辉的日程表 ..................................................................................................................... 17
题目- 二进制加法 ......................................................................................................................... 20
题目- 神奇的幻方 ......................................................................................................................... 21
题目 - 试剂稀释 ........................................................................................................................... 24
题目 - 日历问题
来源
描述 Shanghai 2004 Preliminary
在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去得天数,你的任务是给出这一天是哪年哪月哪日星期几。
提示:2000年1月1日是周六
关于输入
输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是 1, 不必处理。可以假设结果的年份不会超过9999。
关于输出
对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" and "Saturday“。
例子输入
1730
1740
1750
1751
-1
例子输出
2004-09-26 Sunday
2004-10-06 Wednesday
2004-10-16 Saturday
2004-10-17 Sunday
提交程序
#include <stdio.h>
int type(int);
char week[7][10] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
int year[2]= {365, 366};
int month[2][12] = {31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31,31, 29, 31, 30, 31, 30, 31, 31, 30,31, 30, 31};
int main(int argc, char* argv[])
{
int days, dayofweek;
int i = 0, j = 0;
while( scanf("%d", &days) && days != -1)
{
dayofweek = days % 7;
for( i = 2000; days >= year[type(i)]; i++)
days -= year[type(i)];
for( j = 0; days >= month[type(i)][j]; j++)
days -= month[type(i)][j];
printf("%d-%02d-%02d %s\n", i, j + 1, days + 1, week[dayofweek]);
}
return 0;
}
int type( int m)
{
if( m % 4 != 0 || ( m % 100 == 0 && m % 400 != 0 )) return 0;
else return 1; }
题目 - 生日相同
来源
描述 工学院计算概论07
在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的学号,出生月日。试找出所有生日相同的学生。
关于输入
第一行为整数n,表示有n个学生,n < 100。
此后每行包含一个字符串和两个整数,分别表示学生的学号(字符串长度小于10)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。
学号、月、日之间用一个空格分隔。
关于输出
对每组生日相同的学生,输出一行,
其中前两个数字表示月和日,后面跟着所有在当天出生的学生的学号,数字、学号之间都用一个空格分隔。
对所有的输出,要求按日期从前到后的顺序输出。
对生日相同的学号,按输入的顺序输出。
例子输入
6
00508192 3 2
00508153 4 5
00508172 3 2
00508023 4 5
00509122 4 5
00509146 4 6
例子输出
3 2 00508192 00508172
4 5 00508153 00508023 00509122
提示
注意,一个学生的生日不与其他任何学生的生日相同,则不输出该学生的记录。
字符串数组的输入输出使用示例:
char num[10];
scanf("%s",num);
printf("%s",num);
注意:字符串数组输入输出时不需要“&”
#include <stdio.h>
#include <string.h>
int main()
{
int y[100],r[100],t[100];
char xh[100][10],tmpxh[10],sc[100][10];
int n,i,k,j,tmpy,tmpr,tmpt,tx,h;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s %d %d",xh[i],&y[i],&r[i]);
t[i]=y[i]*31+r[i];
}
for(k=1;k<=n;k++){
for(i=0;i<n-k;i++){
if(t[i]>t[i+1]){
tmpy=y[i+1];
y[i+1]=y[i];
y[i]=tmpy;
tmpr=r[i+1];
r[i+1]=r[i];
r[i]=tmpr;
tmpt=t[i+1];
t[i+1]=t[i];
t[i]=tmpt;
strcpy(tmpxh,xh[i+1]);
strcpy(xh[i+1],xh[i]);
strcpy(xh[i],tmpxh);
}
}
}
for(tx=1;tx<373;tx++){
int s=0;
for(i=0;i<n;i++){
if (tx==t[i]){
s++;
strcpy(sc[s],xh[i]);
//printf("%d %d %s %s %d %d\n",i,s,xh[i],sc[s],y[i],r[i]);
}
else if(s>1){
printf("%d %d",y[i-1],r[i-1]);
for(h=1;h<=s;h++){
printf(" %s",sc[h]);
}
printf("\n");
s=0;
}
}
}
system("pause");
return 0;
} 题目 - 开关灯
来源
描述 元培-From Whf
假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,有M个人(M为不大于N的正整数)也从1到M依次编号,第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。
关于输入
输入正整数N和M,以逗号间隔
关于输出
顺次输出关闭的灯的编号,其间用逗号间隔
例子输入
10,10
例子输出
1,4,9
#include <stdio.h>
int a[5001]={0};
int main()
{
int n,m,i,j;
scanf("%d,%d",&n,&m);
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(j%i==0)a[j]=1-a[j];
}
}
for(j=1;j<=n;j++){
if(a[j]==1)printf("%d,",j);
}
system("pause");
return 0;
} 题目 -出现次数超过一半的数
描述
给出一个含有n个整数的数组,请找出其中出现次数超过一半的数(n <= 1000)。 数组中的数大于-50且小于50。
关于输入
输入的第一行包含样例的组数m。
此后有m组样例,每组样例的第一行包含数组大小n,第二行上是这n个整数。 关于输出
如果存在这样的数,输出这个数;否则输出”no”。
例子输入
2
2
1 2
3
1 2 2
例子输出
no
2
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,i,j,k,sz[1001],js[100]={0},you=0;
scanf("%d",&m);
for(i=0;i<m;i++){
you=0;
scanf("%d",&n);
int half=n/2;
for(k=0;k<99;k++)
js[k] = 0;
for(j=0;j<n;j++){
scanf("%d",&sz[j]);
for(k=(-49);k<50;k++){
if(sz[j]==k)js[k+49]++;
}
}
for(k=0;k<99;k++){
if(js[k]>half)
{
printf("%d\n",k-49);
you=1;
}
}
if(you==0)printf("no\n");
}
system("pause");
return 0; }
题目 - 谁考了第k名
来源
描述 北大医学部07计算概论模拟考试1
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
关于输入
第一行有两个整数,学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。 其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
关于输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
例子输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
例子输出
90788004 68.4
#include<stdio.h>
#define M 105
int main(){
int hao[M],i,j;
double fen[M];
int n,k;
scanf("%d %d",&n,&k);
for(i=0;i<n;i++){
scanf("%d %lf",&hao[i],&fen[i]);
}
for(i=1;i<=n;i++){
for(j=0;j<n-i;j++){
double tmp;
int num;
if(fen[j]>fen[j+1])
{tmp=fen[j+1];
fen[j+1]=fen[j];
fen[j]=tmp;
num=hao[i+1];
hao[i+1]=hao[i];
hao[i]=num;}
}
}
printf("%d %g",hao[n-k],fen[n-k]);
return 0;
} 题目 - 区间合并
描述
给定 n 个闭区间 [ai; bi],其中i=1,2,...,n。 这些区间可以用一组不间断的闭区间表示。我们的任务是找出这些区间是否可以用一个不间断的闭区间表示,如果可以的话将这个最小的闭区间输出,否则输出no。
关于输入
第一行为一个整数n,3 ≤ n ≤ 50000。表示输入区间的数量。在第i+1行上(1 ≤ i ≤ n),为两个整数 ai 和 bi ,整数之间用一个空格分隔,表示区间 [ai; bi](其中 1 ≤ ai ≤ bi ≤ 10000)。
关于输出
输出为一行,如果这些区间可以合并为一个闭区间,输出这个最小的闭区间,否则输出”no”
例子输入
5
5 6
1 5
10 10
6 9
8 10
例子输出
1 10
提示
用结构来存储区间信息并按照相应规则对区间排序
#include<stdio.h>
int main()
{
int n;
int a[50000];
int b[50000];
int k,i;
int temp,temp2;
int A=1;
int max=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&a[i],&b[i]);
}
for(k=1;k<n;k++)
{
for(i=0;i<n-k;i++)
{
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
temp2=b[i];
b[i]=b[i+1];
b[i+1]=temp2;
}
}
}
for(i=0;i<n;i++)
{
if(b[i]<a[i+1])
{
A=0;
break;
}
else
{
if((b[i]>max))
{
max=b[i];
}
}
}
if(!A)
printf("no");
else
printf("%d %d",a[0],max);
system("pause");
return 0; }
题目 - 距离排序
来源
描述 POJ 3702
给出三维空间中的n个点(不超过10个),求出n个点两两之间的距离,并按距离由大到小依次输出两个点的坐标及它们之间的距离。
关于输入
输入包括两行,第一行包含一个整数n表示点的个数,第二行包含每个点的坐标(坐标都是整数)。点的坐标的范围是0到100,输入数据中不存在坐标相同的点。
关于输出
对于大小为n的输入数据,输出n*(n-1)/2行格式如下的距离信息:
(x1,y1,z1)-(x2,y2,z2)=距离
其中距离保留到数点后面2位。
例子输入
4
0 0 0 1 0 0 1 1 0 1 1 1
例子输出
(0,0,0)-(1,1,1)=1.73
(0,0,0)-(1,1,0)=1.41
(1,0,0)-(1,1,1)=1.41
(0,0,0)-(1,0,0)=1.00
(1,0,0)-(1,1,0)=1.00
(1,1,0)-(1,1,1)=1.00
提示
注意:
冒泡排序满足下面的性质,选择排序和快速排序(qsort或sort)需要对下面的情况进行额外处理
使用冒泡排序时要注意边界情况的处理,保证比较的两个数都在数组范围内
1. 对于一行输出中的两个点(x1,y1,z1)和(x2,y2,z2),点(x1,y1,z1)在输入数据中应出现在点(x2,y2,z2)的前面。
比如输入:
2
0 0 0 1 1 1
输出是:
(0,0,0)-(1,1,1)=1.73
但是如果输入:
2
1 1 1 0 0 0
输出应该是:
(1,1,1)-(0,0,0)=1.73
2. 如果有两对点p1,p2和p3,p4的距离相同,则先输出在输入数据中靠前的点对。
比如输入:
3
0 0 0 0 0 1 0 0 2
输出是:
(0,0,0)-(0,0,2)=2.00
(0,0,0)-(0,0,1)=1.00
(0,0,1)-(0,0,2)=1.00
如果输入变成:
3
0 0 2 0 0 1 0 0 0
则输出应该是:
(0,0,2)-(0,0,0)=2.00
(0,0,2)-(0,0,1)=1.00
(0,0,1)-(0,0,0)=1.00
#include<stdio.h>
#include<math.h>
int main(){
int n,i,j;
scanf("%d",&n);
struct point{
int x;
int y;
int z;
}site[10];
for(i=0;i<n;i++)
scanf("%d%d%d",&site[i].x,&site[i].y,&site[i].z);
struct {
struct point A;
struct point B;
double d;
}pair[45],temp;
int N=0;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++){
pair[N].A=site[i];
pair[N].B=site[j];
pair[N].d=sqrt(pow(site[i].x-site[j].x,2.0)+pow(site[i].y-site[j].y,2.0)+pow(site[i].z-site[j].z,2.0));
N++;
}
for(i=1;i<N;i++)
for(j=N-1;j>=i;j--)
if(pair[j].d>pair[j-1].d){
temp=pair[j];
pair[j]=pair[j-1];
pair[j-1]=temp;
}
for(i=0;i<N;i++)
printf("(%d,%d,%d)-(%d,%d,%d)=%.2lf\n",pair[i].A.x,pair[i].A.y,pair[i].A.z,pair[i].B.x,pair[i].B.y,pair[i].B.z,pair[i].d);
return 0;
}
题目 - 吃糖果问题
描述
名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0)。妈妈告诉名名每天可以吃一块或者两块巧克力。假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。例如:如果N=1,则名名第1天就吃掉它,共有1种方案;如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案;如果N=3,则名名第1天可以吃 1块,剩2块,也可以第1天吃2块剩1块,所以名名共有2+1=3种方案;如果N=4,则名名可以第1天吃1块,剩3块,也可以第1天吃2块,剩2块,共有3+2=5种方案。现在给定N,请你写程序求出名名吃巧克力的
方案数目。
关于输入
输入只有1行,即整数N。
关于输出
输出只有1行,即名名吃巧克力的方案数。
例子输入
4
例子输出
5
#include <stdio.h>
#include <stdlib.h>
int fun(int n)
{
if(n==1)return 1;
if(n==2)return 2;
else return fun(n-1)+fun(n-2);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
return 0;
}
题目- 采药
描述
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说: “孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采
到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗?
关于输入
输入第一行有两个整数T(1 ≤ T ≤ 1000)和M(1 ≤ M ≤ 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
关于输出
输出包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
例子输入
70 3
71 100
69 1
1 2
例子输出
3
#include <stdio.h>
int totalTime, medics;
int value[100];
int time[100];
int max[1001];
int main()
{
scanf("%d%d", &totalTime, &medics);
int i, t;
for (i=0; i<medics; i++)
{
scanf("%d%d", &time[i], &value[i]);
}
for (i=0; i<medics; i++)
{
for (t=totalTime; t>0; t--)
{
if (time[i] <= t)
{
if (value[i] + max[t-time[i]] > max[t])//第i个的价值+不选第i个且用时为t-time[i-1]时最大价值
{
max[t] = value[i] + max[t-time[i]];
}
}
}
}
printf("%d\n", max[totalTime]);
system("pause");
return 0; }
题目- 辉辉的日程表
描述
自从辉辉同学的光荣事迹出现在 2012 年计算概论期末考试题中之后,辉辉就火了,报社、电视台纷纷请他接受采访,学弟学妹也都想找他交流学习经验。从那时起,辉辉的日程都会排得很满,因为他每天都会先后收到多份预约请求。于是,他希望借助日程表的帮助,来确定可以接受其中哪些预约。
已知辉辉每天愿意接受预约的时间为 9 点到 21 点。排日程表时遵循先到先得的原则,且只有预约时间段完全可用时才能接受预约,接受之后这些时间就不能再次被预约了。请你帮助辉辉设计一个日程表管理程序。
关于输入
第 1 行为 1 个整数 n,表示收到 n 份预约,n ≤ 10。
之后有 n 行预约请求,每行包含 2 个整数 t1 和 t2 ,分别表示每份预约的开始时刻和结束时刻(精确到小时,例如 10 表示 10 点),9 ≤ t1 < t2 ≤ 21。预约请求按收到的先后顺序排列。
关于输出
n行,每行为 Y 或 N ,表示每份预约请求是否接受。
例子输入
6
9 11
10 13
11 15
18 21
16 19
16 18
例子输出
Y
N
Y
Y
N
Y
#include <stdio.h>
#include <stdlib.h>
#define M 14
int main()
{
int n,sz[M][2],is[24]={0},i,j,k,flag;
scanf("%d",&n);
for(i=0;i<n;i++){
flag=0;
scanf("%d%d",&sz[i][0],&sz[i][1]);
for(j=sz[i][0];j<sz[i][1];j++){
if(is[j]!=0){
printf("N\n");
flag=1;
break;
}
if(flag==1)break;
}
if(flag==1){
continue;
}
printf("Y\n");
for(j=sz[i][0];j<sz[i][1];j++){
is[j]=1;
正在阅读:
编程网格若干题目08-26
数据结构习题(2010)(1—10章)11-24
普通高等学校招生全国统一考试数学文试题(陕西卷,含答案)309-24
2014年下学期内科护理期末复习题310-07
建设工程招投标第7章(完)05-27
必修五情景式默写训练及答案10-25
农业传播09-09
观察小乌龟作文400字04-01
基坑支护土方开挖开工典礼仪式03-27
南昌大学数字电路与逻辑设计试卷A(1)09-25
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 网格
- 题目
- 若干
- 编程
- 公积金汇缴清册电子版
- 2014-2020年中国香皂行业市场分析与发展趋势研究报告
- 全程编制棉氨纶汗布项目可行性研究报告方案(可用于发改委立项及银行贷款+2013详细案例范文)
- 仁爱七年级英语上册Unit2 Topic3教学案
- 消防灭火实操演练方案讲解
- 2013华师大版八年级上数学期末试卷及答案
- 顶管工程专项施工方案1
- 营业员试题
- 什么叫现金流举例告诉你
- 2012年寒假实践报告
- 城北污水处理厂二期工程监理方案标书
- 温州金融改革概念股票
- 最新审定西师版数学三年级上册《东西南北》教案第1课时(优秀资料)
- 钢的回火
- 科学领域的特点与指导策略
- 2016-2022年中国电梯检验检测行业监测及投资趋势预测报告
- 世界各国不锈钢标准钢号对照表
- 老舍《断魂枪》赏析2
- 模块四后测 2014教育技术中级培训100分答案
- 自然科学史研究201402-从文献记载追溯坩埚炼铁的源流_刘培峰