编程题输入输出专题

1.每个输入包含一个测试用例。

每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。

接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。

接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。

保证不存在两项工作的报酬相同。

输入例子:

3 3

1 100

10 1000

1000000000 1001

9 10 1000000000

Python:

line_1 = raw_input().strip().split()

work_re = []

while(line_1 == []): #语句的意思是防止输入中有空各行输入,可以过滤掉

    line_1 = raw_input().split()

n,m = int(line_1[0]),int(line_1[1])

for i in range(n):

    line = raw_input().strip().split()

    while(line == []):

        line =  raw_input().strip().split()

    work_re.append([int(x) for x in line])

m_cap = [int(x) for x in raw_input().split()]

while(m_cap == []):

    m_cap = [int(x) for x in raw_input().split()]

JAVA:

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int m = sc.nextInt();

int t1=0,t2=0;

HashMap hs = new HashMap();

int[] a = new int[n+m];

int[] b = new int[m];

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

t1 = sc.nextInt();

t2 = sc.nextInt();

a[i] = t1;

hs.put(t1,t2);

}

for(int i=0;i<m;i++){

t1 = sc.nextInt();

a[n+i] = t1;

b[i] = t1;

if(!hs.containsKey(t1))

hs.put(t1,0);

}

C++:

2.输入的第一行包含一个正整数t(1 <= t <= 1000), 表示测试用例数

接下来每两行一个测试数据, 第一行一个正整数n(1 <= n <= 1000),表示道路的长度。

第二行一个字符串s表示道路的构造,只包含'.'和'X'。

输入例子:

2

3

.X.

11

...XX....XX

Python:

count = int(input())  # 测试用例的个数

n = []

lantern = []

for i in range(count):

  n_tmp = int(input())  # 路灯个数

  n.append(n_tmp)

  lantern_tmp = input()  # 路灯分布字符串

  lantern.append(lantern_tmp)

Java:

int n = scanner.nextInt();

while (n-- > 0) {

int len = scanner.nextInt();

String line = scanner.next();

}

C++:

cin >> t

for (int i = 0; i < t; i++) {

int n;//道路长

cin >> n;

int j = 0, count = 0;

while (j++ < n) {

char ch; cin >> ch;

if (ch == '.') {

count++;

if (j++ < n) cin >> ch;

if (j++ < n) cin >> ch;

}

}

cout << count << endl;

}

每个输入包含一个测试用例。

每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。

接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。

输入例子:

3

LRR

输入包括五行。

第一行包括一个整数n(2 <= n <= 50), 表示矩形的个数。

第二行包括n个整数x1[i](-10^9 <= x1[i] <= 10^9),表示左下角的横坐标。

第三行包括n个整数y1[i](-10^9 <= y1[i] <= 10^9),表示左下角的纵坐标。

第四行包括n个整数x2[i](-10^9 <= x2[i] <= 10^9),表示右上角的横坐标。

第五行包括n个整数y2[i](-10^9 <= y2[i] <= 10^9),表示右上角的纵坐标。

输入例子:

2

0 90

0 90

100 200

100 200

Python:
import sys
lines = sys.stdin.readlines()
n = int(lines[0])
x1 = list(map(int,lines[1].split()))
y1 = list(map(int,lines[2].split()))
x2 = list(map(int,lines[3].split()))
y2 = list(map(int,lines[4].split()))

C++:

int n; //矩形数量

cin >> n;

vector<int> x1(n, 0);

vector<int> y1(n, 0);

vector<int> x2(n, 0);

vector<int> y2(n, 0);

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

  cin >> x1[i];

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

  cin >> y1[i];

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

  cin >> x2[i];

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

  cin >> y2[i];

Java:

Scanner in=new Scanner(System.in);

        int n=in.nextInt();

        int[] x1=new int[n];

        int[] x2=new int[n];

        int[] y1=new int[n];

        int[] y2=new int[n];

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

            x1[i]=in.nextInt();

            xAxial.add(x1[i]);

        }

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

            y1[i]=in.nextInt();

        }

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

            x2[i]=in.nextInt();

            xAxial.add(x2[i]);

        }

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

            y2[i]=in.nextInt();

        }

每个输入包含一个测试用例。

每个测试用例的第一行包含一个正整数,表示闹钟的数量N(N<=100)。

接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0<=A<24)时Mi(0<=B<60)分。

接下来的一行包含一个整数,表示从起床算起他需要X(0<=X<=100)分钟到达教室。

接下来的一行包含两个整数,表示上课时间为A(0<=A<24)时B(0<=B<60)分。

数据保证至少有一个闹钟可以让牛牛及时到达教室。

输入例子:

3

5 0

6 0

7 0

59

6 59

 

Python:

n = int(sys.stdin.readline().strip())

values = []

For i in range(n):

line = sys.stdin.readline().strip().split(' ')

values.append(line)

dst_time = int(sys.stdin.readline().strip())

class_time = sys.stdin.readline().strip().split(' ')

Java:

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int h=0,m=0;

int[] a = new int[n];

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

h = sc.nextInt();

m = sc.nextInt();

a[i] = h*60+m;

}

int t = sc.nextInt();

a = sc.nextInt();

b = sc.nextInt();

C++:

int *hour = new int[n];

int *minute = new int[n];

int *time = new int[n];

int X;

int reach_hA, reach_mB;

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

cin >> hour[i] >> minute[i];

time[i] = hour[i] * 60 + minute[i];

}

cin >> X;

cin >> reach_hA >> reach_mB;

之前一直认为用raw_input( )sys.stdin.readline( )来获取输入的效果完全相同,但是最近在写程序时有类似这样一段代码:

import sys

 

line = sys.stdin.readline()

for i in range(len(line)):

    print line[i]+'hello'

  它的运行结果让我百思不得其解:

  怎么会多输出一个空行和hello?然后特意输出了line的长度,发现是4,然后重新调试了几次,发现无论输入什么,len(line)的长度总比输入的长度大1,然后用raw_input( )试着运行了一下,运行是正常的,然后查阅了一下文档,发现sys.stdin.readline( )会将标准输入全部获取,包括末尾的'\n',因此用len计算长度时是把换行符'\n'算进去了的,但是raw_input( )获取输入时返回的结果是不包含末尾的换行符'\n'的。

import sys

 

line1 = sys.stdin.readline()

line2 = raw_input()

print len(line1),len(line2)

  因此如果在平时使用sys.stdin.readline( )获取输入的话,不要忘了去掉末尾的换行符,可以用strip( )函数去掉(sys.stdin.readline( ).strip('\n')),这样处理一下就行了。

猜你喜欢

转载自blog.csdn.net/Bean771606540/article/details/79748242
今日推荐