某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.输入
设x1 , x2 ,…… , xn 是实直线上的n 个点。用固定长度的闭区间覆盖这n 个点,至少需要多少个这样的固定长度闭区间?对于给定的实直线上的n个点和闭区间的长度k,设计解此问题的有效算法,计算覆盖点集的最少区间数,并证明算法的正确性。Input输入数据的第一行有2 个正整数n和k(n≤10000,k≤100),表示有n个点,且固定长度闭区间的长度为k。接下来的
Description王小二毕业后从事船运规划工作,吉祥号货轮的最大载重量为M吨,有10种货物可以装船。第i种货物有wi吨,总价值是pi。王小二的任务是从10种货物中挑选若干吨上船,在满足货物总重量小于等于M的前提下,运走的货物的价重比最大。Input输入数据的第一行有一个正整数M(0 < M < 10000),表示所有货物最大载重量。在接下来的10行中,
Description给定n(1<=n<=50000)个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n。 例如,当(a[1],a[2
Description子集和问题的一个实例为〈S,t〉。其中,S={ x1 , x2 ,…,xn }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得:。试设计一个解子集和问题的回溯法。对于给定的正整数的集合S={ x1 , x2 ,…,xn }和正整数c,计算S
输入一个字符串,分别统计出其中字母、数字和其他字符的个数number="0123456789"letter="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"str=input("请输入字符串:")length=len(str)numbercnt=0lettercnt=0othercnt=0for i in str: if i in
问题描述:大于1的正整数n可以分解为n=x1x2......*xm。例如,当n=12时,有8种不同的分解式:12= 12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 对于给定的正整数n,编程计算n 共
对于一个正整数n的划分,就是把n变成一系列正整数之和的表达式。注意,分划与顺序无关,例如6=5+1跟6=1+5是 同一种分划。另外,单独这个整数本身也算一种分划。 例如:对于正整数n=5,可以划分为: 5;4+1;3+2;3+1+1;2+2+1;2+1+1+1;1+1+1+1+1;输入描述:输入一个正整数n输出描述:输出整数n划分的总数#include<stdio.h>int H(in
#输出1--100之间的质数flag=1for n in range(2,101): for i in range(2,n): if n%i==0: break else: print(n,end=" ")运行结果如下: 需要注意的是,while语句或for语句中有break语句,程序会跳过while语句或语句后的else语
x=input()x=int(x)a=1sum=0for i in range(1,x+1): a=a*i sum=sum+aprint("%d"%sum)
1.while语句中嵌套while语句:i=1while i<10: j=1 while j<=i: print("%d*%d=%-3d"%(i,j,i*j),end=" ") j=j+1 i=i+1 print(end="\n")2.while语句中嵌套for语句:i=1while i<10: for j in range
a=input()b=input()c=input()a=int(a)b=int(b)c=int(c)if a>=b: if a>=c: print("a,b,c中最大的值为%d"%a) else: print("a,b,c中最大的值为%d"%c)else: if b>=c: print("a,b,c中最大的值为%d"%
小C语言文法 1. <程序>→<main关键字>(){<声明序列><语句序列>}2. <声明序列>→<声明序列><声明语句>|<声明语句>|<空>3. <声明语句>→<标识符表>;4. <标识符表>→<标识符>,<标识符表>
Description递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。表达式文法如下:→TG→+TG |&n
给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。输入格式:输入数据的第1行是数字三角形的行数n,1≤n≤100。接下来n行是数字三角形各行中的数字。所有数字在0..99之间。输出格式:输出数据只有一个整数,表示计算出的最大值。//动态规划
用i来表示x坐标轴上坐标为[i-1,i]的长度为1的区间,并给出n个不同的整数,表示n个这样的区间。现在要求画m条线段覆盖住所有的区间,条件是:每条线段可以任意长,但是要求所画线段的长度之和最小,并且线段的数目不超过m。输入格式:输入包括多组数据,每组数据的第一行表示区间个数n(1≤n≤200) 和所需线段数m(1≤m≤50),第二行表示n个点的坐标i(1≤i≤200)。输出格式:每组输出占一行,
输入格式:第一行输入活动数目n(0<n<100);以后输入n行,分别输入序号为1到n的活动使用中心的开始时刻a与截止时刻b(a,b为整数且0<=a<b<24,a,b输入以空格分隔)。输出格式:输出最佳安排序列所包含的各个活动(按照活动被安排的次序,两个活动之间用逗号分隔),如果有多个活动安排序列符合要求输出字典序最小的序列。输入样例:6 8 10 9 16 11 16
有一个长度为n(n <= 240)的正整数,从中取出s(s < n)个数,使剩余的数保持原来的次序不变,求这个正整数经过删数之后最小是多少。输入:178543 4样例输出:13把对s个数字的删除,看成是一个逐步实现的过程,每一步删除一个数字,用s步完成对s个数字的删除。每一步总是选择一个使剩下的数最小的数字完成删除。按照从左向右的顺序进行搜索,删除第一个递减区间的首位数字。//删数问题
在8*8格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?此题采用试探的方式,也就是回溯法的思想。#include<stdio.h>//将棋盘当做行坐标、列坐标都从1开始的二维数组int q[10];//某行上的皇后所在列的位置int flag[10]={0};//该列是否安全(0安全,1不安全)int list1[15]
从n个不同元素任取m(m<=n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列,当m=n时所有的排列情况叫全排列。现输入n个递增的数,请你输出这n个数的全排列。全排列输出顺序如样例所示。输入格式:第一行先输入一个整数n(1<=n<=10)。接下来是一行输入n个由空格分开的互不相同的整数num (1 <= num <= 90000)。输出格式
给出N (N <= 100000) 个数,然后进行M (M <= 50) 次询问,每次询问时,输入一个数X (1 <= X <= N),输出N个数中第X大的数。输入格式:首先输入一个整数N,代表有N个数,下面一行包含N个整数,用空格隔开。然后为一个整数M,代表有M次询问,下面的M行,每行一个整数X。输出格式:输出N个数中第X大的数。#include<stdio.h&g
现有一个包含n个整数(1<=n<=900000)的无序序列(保证序列内元素各不相同),输入一个整数k(1<=k<=n),请用较快的方式找出该序列的第k小数并输出。输入格式:第一行先输入两个整数,n和k。接下来是一行输入n个由空格分开的互不相同的整数num(1<=num<=90000000)。输出格式:输出该组数据中第k小的数num。//快速排序(递归和分治)#i
本题要求实现一个快速排序函数。 给定 N ( N<= 1000 ) 个 int 范围内的整数,要求用快速排序对数据进行降序排列。//快速排序(递归和分治)#include<stdio.h>void Quick_sort(int a[],int left,int right){ int i,j; i=left; j=right; int key=a[left
快速排序是利用分治递归技术实现的一种比较高效的方法。本题要求实现一个快速排序函数。给定 N ( N<= 1000 ) 个 int 范围内的整数,要求用快速排序对数据进行升序排列。//快速排序(递归和分治)#include<stdio.h>void Quick_sort(int a[],int left,int right){ int i,j; i=left; j
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示,A点(0,0)、B点(n,m)(n,m为不超过15的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。输入
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。#include<stdio.h>typedef str
输入格式:读入n及n个整数。输出格式:输出逆置后的n个整数,以空格分隔(最后一个数的后面没有空格)。#include<stdio.h>typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;LinkList ListCreat(){ LinkList L,tail,p; L=(Lin
输入格式:读入n及n个整数。输入要插入元素的位置和大小输出格式:输出插入元素后的链表,以空格分隔(最后一个数的后面没有空格)。#include<stdio.h>typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;LinkList ListCreat(){ LinkList L,tail
for(表达式1;表达式2;表达式3) 语句(1)首先求解表达式1,。其值一般用于给循环初始变量赋值。(2)求解表达式2,若其值为非0,则执行for语句中指定的循环体语句,然后执行下面的第(3)步,若为0,则结束循环,转到第(5)步。表达式2一般用于条件判断,并决定循环是否结束。(3)求解表达式3。表达式3一般用于改变循环变量的值,使循环趋向结束。(4)返回第二步,看是否满足表达式2,从而确定是否
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号