CCF题目:相邻数对

问题描述

  给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。

输入格式

  输入的第一行包含一个整数n,表示给定整数的个数。

  第二行包含所给定的n个整数。

输出格式

  输出一个整数,表示值正好相差1的数对的个数。

样例输入

6

10 2 6 3 7 8

样例输出

3

样例说明

  值正好相差1的数对包括(2, 3), (6, 7), (7, 8)。

评测用例规模与约定

  1<=n<=1000,给定的整数为不超过10000的非负整数。

------------------------------------------------------------------------------------------

常规解法:

package CSP3;

import java.util.Scanner;

public class NearNum {
	public static void main(String[] args) {
		new NearNum().run();//NearNum();
	}
	public void run() {
		Scanner sc=new Scanner(System.in);
		int N=sc.nextInt();
		int[] a=new int[1000];
		int result=0;
		for(int i=0;i<N;i++){
			a[i]=sc.nextInt();
		}
		for(int i=0;i<N;i++){
			for(int j=i+1;j<N;j++){
				if(Math.abs(a[i]-a[j])==1){
					result+=1;
				}
			}
		}
		System.out.println(result);
	}
}

巧妙解法:

package CSP3;

import java.util.*;

public class NearNum2 {
	public static void main(String[] args) {
		new NearNum2().run();//NearNum();
	}
	public void run() {
		Scanner sc=new Scanner(System.in);
		int N=sc.nextInt();
		int[] count=new int[10007];
		int result=0;
		for(int i=0;i<N;i++){
			count[sc.nextInt()]++;
		}
		for(int i=1;i<=9999;i++){
				result+=Math.min(count[i+1], count[i]);
		}
		System.out.println(result);
		//System.out.println("++"+count[1]);
	}
}

总结出一条规律,CCF赛题的第一题大多可以用解法二的那种思路解决。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-23 00:25:10

CCF题目:相邻数对的相关文章

CCF - 201409-1 - 相邻数对

问题描述 试题编号: 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好相差1的数对的个数. 样例输入 610 2 6 3 7 8 样例输出 3 样例说明 值正好相差1的数对包括(2, 3), (6, 7), (7, 8). 评测用例规模与约定 1

[算法]数组排序之后相邻数的最大差值

题目: 给定一个整形数组arr,返回排序后的相邻两数的最大差值. 时间复杂度为O(N). 解答: 如果用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想(不是桶排序),可以做到O(N),额外空间复杂度为O(N).遍历arr找到最大值max和最小值min.如果arr的长度为N,准备N+1个桶,把max单独放在第N+1个桶中,[min,max)范围上的数放在1~N号桶里,对于1~N号桶中的每一个桶来说,负责的区间为(max-min)/N.如果一个数为num,它应该分配进(num-m

Leetcode:Candy 每个数都比相邻数大

原题戳我 There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy. Children with a higher rating get more can

题目552-小数阶乘-nyoj20140811

#include <stdio.h>int main(){    int m;    while(scanf("%d",&m)!=EOF)    {        int sum,i;        sum=1;        for(i=1;i<=m;i++)        sum=sum*i;        printf("%d\n",sum);        }         return 0;    } 题目552-小数阶乘-ny

题目557-奇数的个数-nyoj20140812

#include <stdio.h>int main(){    int a[11];    while(scanf("%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9])!=EOF)   {        int i,num;        num=0;    for(i=0;i&l

CCF真题之相邻数对

201409-1 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好相差1的数对的个数. 样例输入 6 10 2 6 3 7 8 样例输出 3 样例说明 值正好相差1的数对包括(2, 3), (6, 7), (7, 8). 评测用例规模与约定 1<=n<=1000,给定的整数为不超过10000的非负整数. 源代码: #include <io

CCF——相邻数对201409-1

问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好相差1的数对的个数. 样例输入 6 10 2 6 3 7 8 样例输出 3 样例说明 值正好相差1的数对包括(2, 3), (6, 7), (7, 8). 评测用例规模与约定 1<=n<=1000,给定的整数为不超过10000的非负整数. 1 package com.ezreal; 2 3 imp

CSU 1350 To Add Which? 给序列增加最少的值使得相邻数差&lt;=D 优先队列+贪心

题目链接:点击打开链接 题意:给定n长的序列,常数D 每次操作可以给某个数增加1. 问最少需要操作几次使得相邻的2个数的差值<=D 思路: 每次弹出队列里最大的数,然后更新就好了 import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Ite

CCF 有趣的数

题意:给你4个数0,1,2,3,用这四个数字组成n位的数,其中 0必须 在1前面,  2必须在三前面,问你n位数没有前导0的有多少个. 解题思路: 1) 状态压缩DP,dp[i][j] 表示 到了第i位  出来了那几个数,分别的状态为多少. j(1-15),然后求出各自的DP系数就行了. 解题代码: 1 // File Name: 有趣的数.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月30日 星期一 16时46分03秒 4 5 #i