精华内容
下载资源
问答
  • 算法 - 输出一个字符串的全排列(C++)

    万次阅读 多人点赞 2019-02-19 10:19:44
    分享一个大牛的人工智能教程。零基础!通俗易懂!...输出它的全排列,第一个字符应该分别为a,b,c;第二个字符,后面应该是除去已输出部分的剩余部分的全排列。 * * 即对于"abc", *...

    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 

    /*
     * Created by Chimomo
     *
     * 实现方法:
     * 对于一个字符串"abc"输出它的全排列,第一个字符应该分别为a,b,c;第二个字符,后面应该是除去已输出部分的剩余部分的全排列。
     *
     * 即对于"abc",
     * 输出 a,输出"abc"除去'a'的全排列;
     *   输出 b,输出"bc"除去'b'的全排列;
     *   输出 c,输出"bc"除去'c'的全排列;
     * 输出 b,输出"abc"除去'b'的全排列;
     * 输出 c,输出"abc"除去'c'的全排列;
     *
     * 所以一个递归的实现方法是:
     * void permute(已输出部分,全部除去已输出部分)
     *   if 全部除去已输出部分!=空
     *     for letter in 全部除去已输出部分
     *       已输出部分:append letter
     *       全部除去已输出部分:remove letter
     *       permute(已输出部分,全部除去已输出部分)
     *     end for
     *   else 输出 已输出部分
     */
    
    #include <iostream>
    #include <list>
    #include <iterator>
    
    using namespace std;
    
    /**
     * Permute.
     * @param pre Already permuted list.
     * @param str The list not permuted.
     */
    void permute(list<char> pre, list<char> str) {
        if (!str.empty()) {
            for (auto i = str.begin(); i != str.end(); ++i) {
                list<char> curPre(pre);
                list<char> tmpList(str.begin(), str.end());
                curPre.push_back(*i);
                tmpList.remove(*i);
                permute(curPre, tmpList);
            }
        } else {
            copy(pre.begin(), pre.end(), ostream_iterator<char>(cout, ""));
            cout << endl;
        }
    }
    
    int main() {
        char *alphabet = const_cast<char *>("ABCDE");
        list<char> str(alphabet, &alphabet[5]);
        permute(list<char>(), str);
        return 0;
    }
    
    // Output:
    /*
    ABCDE
    ABCED
    ABDCE
    ABDEC
    ABECD
    ABEDC
    ACBDE
    ACBED
    ACDBE
    ACDEB
    ACEBD
    ACEDB
    ADBCE
    ADBEC
    ADCBE
    ADCEB
    ADEBC
    ADECB
    AEBCD
    AEBDC
    AECBD
    AECDB
    AEDBC
    AEDCB
    BACDE
    BACED
    BADCE
    BADEC
    BAECD
    BAEDC
    BCADE
    BCAED
    BCDAE
    BCDEA
    BCEAD
    BCEDA
    BDACE
    BDAEC
    BDCAE
    BDCEA
    BDEAC
    BDECA
    BEACD
    BEADC
    BECAD
    BECDA
    BEDAC
    BEDCA
    CABDE
    CABED
    CADBE
    CADEB
    CAEBD
    CAEDB
    CBADE
    CBAED
    CBDAE
    CBDEA
    CBEAD
    CBEDA
    CDABE
    CDAEB
    CDBAE
    CDBEA
    CDEAB
    CDEBA
    CEABD
    CEADB
    CEBAD
    CEBDA
    CEDAB
    CEDBA
    DABCE
    DABEC
    DACBE
    DACEB
    DAEBC
    DAECB
    DBACE
    DBAEC
    DBCAE
    DBCEA
    DBEAC
    DBECA
    DCABE
    DCAEB
    DCBAE
    DCBEA
    DCEAB
    DCEBA
    DEABC
    DEACB
    DEBAC
    DEBCA
    DECAB
    DECBA
    EABCD
    EABDC
    EACBD
    EACDB
    EADBC
    EADCB
    EBACD
    EBADC
    EBCAD
    EBCDA
    EBDAC
    EBDCA
    ECABD
    ECADB
    ECBAD
    ECBDA
    ECDAB
    ECDBA
    EDABC
    EDACB
    EDBAC
    EDBCA
    EDCAB
    EDCBA
    
    */

     

    展开全文
  • JAVA算法竞赛输入输出专题

    千次阅读 多人点赞 2018-12-23 01:27:00
    小编由于报名了蓝桥杯Java组,所以日常做题从使用C/C++转变成使用Java。在转变的过程中,肯定会遇到很多大大小小的输入输出问题。小编打算总结下来,当做自己学习的材料,也分享给感兴趣的朋友。

    2020.2.23更新,增加了数组模块


    前言

    小编由于报名了蓝桥杯Java组,所以日常做题从使用C/C++转变成使用Java。在转变的过程中,肯定会遇到很多大大小小的输入输出问题。小编打算总结下来,当做自己学习的材料,也分享给感兴趣的朋友。

    文件名问题

    在比赛提交的代码中,主类必须以public class Main来命名,而且不能带package语句否则会报出编译错误。

    //去掉public或者不使用Main作为类名都会gg,亲测有效orz

    基本的输入和输出

    竞赛入门最经典的问题,莫过于A+B Problem,如果连最基本的输入输出都做不到,学了再多的算法也用不出来。

    import java.util.*;
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner cin = new Scanner(System.in);
    		int a, b;
    		while (cin.hasNext()) {
    			a = cin.nextInt();
    			b = cin.nextInt();
    			System.out.println(a + b);
    		}
    	}
    }
    

    上面代码展示了最基本的输入输出框架,输入类Scanner包含在java.util类包中,首先应该把它导入。

    import java.util.*;
    

    由于java的输入需要预先创建输入类对象,所以我们一般习惯在main函数的第一句先创建这个Scanner类对象,对象命名为cin算是表达对C/C++的热爱和怀念吧hhh
    如果题目数据量比较大的话可以选择第二种初始化方法,运行效率会高上一些。

    Scanner cin = new Scanner(System.in);
    //or
    Scanner cin = new Scanner(new BufferedInputStream(System.in));
    

    由于题目说明“输入包括多组数据,到文件结尾为止”,类比C/C++的格式,我们很容易理解以下的这段java代码

    while (cin.hasNext())  //当输入流中还有数据时
    {
        a = cin.nextInt();
    	b = cin.nextInt();
    }
    

    1.基本数据类型

    这些类型在C/C++中基本上已经用烂了,一般过目一遍就会了。

    int n = cin.nextInt();//读入一个整数
    double d = cin.nextDouble();//读入一个双精度浮点数
    long l = cin.nextLong();//读入一个长整型数
    

    需要注意一点:由于Java的main方法是static类型,所以定义全局变量或者方法的时候就需要加上static关键字!

    2.数组

    关于数组的创建,Java和C/C++也有所不同,它在创建时需要使用new关键字来为其分配存储空间,不过也不会非常麻烦。

    int arr[] = new int[Size];
    //or
    int []arr = new int[Size];
    

    对于二维数组的初始化问题,可以看看我写的另一篇文章:Java 二维数组的初始化

    3.字符&字符串

    Scanner类中并没有提供单个字符char类型的读入方法,但是我们可以先调用next()方法读取只包含一个字符的字符串,然后用charAt(0)返回0号索引处的字符,即可得到读取到单个字符。

    char ch = cin.next().charAt(0);
    

    对于字符串,java中已经封装好了字符串String类,我们也可以用char数组在进行字符串存储。

    String str1 = next(); //相当于C/C++中的scanf("%s",str);或cin>>str;
    String str2 = nextLine();//相当于C/C++中的gets(str2);或者getline(cin,str2);
    
    char s1[] = cin.next().toCharArray();//调用toCharArray()方法将其转化为char类型数组
    char s2[] = cin.nextLine().toCharArray();//类比理解
    

    但是要注意的是,我们不能像C++那样直接用数组下标去访问String类对象中的某号字符。 我们通常利用charAt(int index)方法来访问String类对象中的某号字符,或者不需要调用String类的其他方法的情况下,直接采用char类型数组来存储字符串。

    4.输出

    日常基本的输出:

    System.out.println(); //相当于C++中的cout<<endl;
    System.out.print();   //相当于C++中的cout<<"";
    

    输出到文件中:
    以下情况可能会用到输出到文件中

    • 当数据量过于庞大,java的控制台都无法输出,需要输出到文件中。
    • 用暴力法打表,需要按格式先输入到文件中。
    try {
    	BufferedWriter bw = new BufferedWriter(new FileWriter(new File("E://result.txt")));
    	bw.write(str);//str表示写入文件的内容
    	bw.flush();//立刻将缓存区的数据写入数据流
    	bw.close();//将BufferedWriter流关闭
    } catch (Exception e) {
    	e.printStackTrace();
    }
    

    File(string pathname); 用于初始化文件类,pathname表示文件的路径
    FileWriter(File file); 用于初始化文件写入类FileWriter,file表示文件类对象





    未完待续…

    展开全文
  • 从键盘上输入一个年份值和一个月份值,输出该月的天数。 说明:一年 12 个月,大 月的天数是 31,小月的天数是 30。2 月的天数比较特殊,遇到闰年是 29 天,否则为 28 天。 例如,输入 2011、3,则输出 31 天。 ...

    实现统计今天是该月的有多少天关键算法。从键盘上输入一个年份值和一个月份值,输出该月的天数。

    说明:一年有 12 个月,大
    月的天数是 31,小月的天数是 30。2 月的天数比较特殊,遇到闰年是 29 天,否则为 28 天。
    例如,输入 2011、3,则输出 31 天。
    注意:使用分支结构语句实现。

    public class week1 {
    	public static void main(String[] args) {
    		int[] intArray={31,28,31,30,31,30,31,31,30,31,30,31};//十二月份
    		
    		Scanner input = new Scanner(System.in);
    		System.out.println("请输入某年某月:");
    		System.out.print("年:");
    		int year= input.nextInt();
    		System.out.print("月:");
    		int mm= input.nextInt();
    		//每过四年就有一次闰年
    		//如果是闰年。 
    		if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)){
    			intArray[1] = 29;//闰年天数加1
    		}
    		System.out.println(year+"年的"+mm+"月有"+intArray[mm-1]+"天");
    	}
    }
    
    展开全文
  • 算法竞赛之【输入输出重定向】

    万次阅读 2018-06-10 10:18:00
    算法竞赛之【输入输出重定向】 当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往...

    算法竞赛之【输入输出重定向】

    当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往不能一次成功,每次运行时,都要重新输入一遍测试数据,对于有大量输入数据的题目,输入数据需要花费大量时间。 

    一个好的方法是用文件一一把输入数据保存在 文件中,输出数据也保存在文件中。这样,只要事先把输入数据保存在文件中,就不必每次重新输入了;数据输出在文件中也避免了“输出太多,一卷屏前面的就看不见了”这样的尴尬,运行结束后,慢慢浏览输出文件即可。如果有标准答案文件,还可以进行文件比较”,而无须编程人员逐个检查输出是否正确。事实上,几乎所有算法竞赛的输入数据和标准答案都是保存在文件中的。使用文件最简单的方法是使用输入输出重定向,只需在main函数的入口处加入以下两条语句:

    freopen("input.txt","r", stdin) ;

    freopen("output.txt","w", stdout) ;

    函数名:freopen
    声明:FILE *freopen( const char *path, const char *mode, FILE *stream );
    所在文件: stdio.h
    参数说明:
    path: 文件名,用于存储输入输出的自定义文件名。
    mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。
    stream: 一个文件,通常使用标准流文件。
    返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)
    功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。

     

    上述语句将使得scanf从文件input.txt 读入,printf 写入文件output.txt。事实上,不只是scanf和printf,所有读键盘输入、写屏幕输出的函数都将改用文件。尽管这样做很方便,并不是所有算法竞赛都允许用程序读写文件。甚至有的竞赛允许访问文件,但不允许用freopen这样的重定向方式读写文件。参赛之前请仔细阅读文件读写的相关规定。

     

    下面以在VC下调试“计算a+b”的程序举例。
    【C语法】

     1 #include <stdio.h> 
     2 int main() 
     3 { 
     4 int a,b; 
     5 freopen("debug\\in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取 
     6 freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中 
     7 while(scanf("%d %d",&a,&b)!=EOF) 
     8 printf("%d\n",a+b); 
     9 fclose(stdin);//关闭文件 
    10 fclose(stdout);//关闭文件 
    11 return 0; 
    12 } 

    【C++语法】

     1  2 #include <stdio.h> 
     2  3 #include <iostream.h> 
     3  4 int main() 
     4  5 { 
     5  6 int a,b; 
     6  7 freopen("debug\\in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取 
     7  8 freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中 
     8  9 while(cin>>a>>b) 
     9 10 cout<<a+b<<endl; // 注意使用endl 
    10 11 fclose(stdin);//关闭文件 
    11 12 fclose(stdout);//关闭文件 
    12 13 return 0; 
    13 14 } 

    freopen("debug\\in.txt","r",stdin)的作用就是把标准输入流stdin重定向到debug\\in.txt文件中,这样在用scanf或是用cin输入时便不会从标准输入流读取数据,而是从in.txt文件中获取输入。只要把输入数据事先粘贴到in.txt,调试时就方便多了。 
    类似的,freopen("debug\\out.txt","w",stdout)的作用就是把stdout重定向到debug\\out.txt文件中,这样输出结果需要打开out.txt文件查看。

     

    提示

    请在比赛之前了解文件读写的相关规定:是标准输入输出(也称标II/O,即直接读键盘、写屏幕), 还是文件输入输出?如果是文件输入输出,是否禁止用重定向方式的问文件?

    需要说明的是:
    1. 在freopen("debug\\in.txt","r",stdin)中,将输入文件in.txt放在文件夹debug中,文件夹debug是在VC中建立工程文件时自动生成的调试文件夹。如果改成freopen("in.txt","r",stdin),则in.txt文件将放在所建立的工程文件夹下。in.txt文件也可以放在其他的文件夹下,所在路径写正确即可。
    2. 可以不使用输出重定向,仍然在控制台查看输出。
    3. 程序调试成功后,提交到oj时不要忘记把与重定向有关的语句删除。

     

    如果比赛中要求用文件输入输出,但禁止用重定向的方式,又当如何呢?

    在算法竞赛中,如果不允许使用重定向方式读写数据,应使用fopen和fscant,fprintf进行输入输出。

    我们还是以前面的例子为例:

    【C语法】

     1 #include <stdio.h> 
     2 int main() 
     3 {
     4     int a,b;
     5     FILE *fin, *fout;
     6     fin = fopen("debug\\in.txt","rb");//debug\\in.txt 你的测试文件的实际路径
     7     fout = fopen("debug\\out.txt","wb");//
     8     while(fscanf(fin,"%d%d",&a,&b) == 2)
     9         fprintf(fout,"%d \n",a+b);
    10     fclose(stdin);//关闭文件 
    11     fclose(stdout);//关闭文件 
    12     return 0; 
    13 } 

    【C++语法】

     1 #include <iostream>
     2 #include <fstream>
     3 using namespace std;
     4 int main() 
     5 {
     6     fstream fin,fout;//定义一个文件输入输出流对象
     7     int a,b;
     8     fin.open("debug\\in.txt",ios::in);//debug\\in.txt 你的测试文件的实际路径
     9     fout.open("debug\\out.txt",ios::out);
    10     while(!fin.eof())
    11     {
    12         
    13         fin>>a>>b;
    14         if(fin.eof() == true)//如果文件到达末尾退出  eof()是文件流中的错误处理函数,它遇到文件结尾会返回true(一个非零值)。
    15             break;
    16         fout<<a+b<<endl;
    17     }
    18     
    19     fin.close();//关闭文件 
    20     fout.close();//关闭文件 
    21     return 0; 
    22 } 

     

    重定向和fopen两种方法各有优劣。重定向的方法写起来简单、自然,但是不能同时读写文件和标准输入输出; fopen 的写法稍显繁琐,但是灵活性比较大(例如,可以反复打开开读写文件)。

    【提示】

     如果想把fopen版的程序改成读写标准输入输出,只需赋值"fin = stdin; fout = stdout;" 即可,不要调用fopen和fclose。

     

    posted @ 2018-06-10 10:18 底层码农 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • Java实现 蓝桥杯VIP 算法提高 3-2字符串输入输出函数

    万次阅读 多人点赞 2019-06-22 10:50:10
    算法提高 3-2字符串输入输出函数 时间限制:1.0s 内存限制:512.0MB 描述  编写函数GetReal和GetString,在main函数中分别调用这两个函数。在读入一个实数和一个字符串后,将读入的结果依次用printf输出。  两次...
  • JavaScript写算法题的输入输出格式

    千次阅读 2018-06-01 21:51:07
    作为名前端程序员,如果在平时的备考刷题时能用自己最熟悉JS来编写代码是件很美滋滋的事情,但是很多小伙伴会发现用JS写的代码过不了OJ,正是因为你的输入输出格式不对导致的。 下面是 输入a b,输出a+b的值得...
  • 题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。 解题思路:针对此字符串,从头到尾开始遍历,首先判断第一个字符,如果没有负号,继续遍历,负号,将最终输出的整数以负数形式输出即可;其次针对...
  • 机器学习三部分:输入算法输出输入:驱动机器学习的数据 输入是训练和算法需要的数据集。从源代码到统计数据,数据集可以包含任何东西: GSA / data(美国总务管理局数据):...
  • 输入数据多组,每组占一行,每行包括一个实数,表示球的半径。输出对应球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。 注:PI = 3.1415927 例如:输入 2 输出 33.510 注意:使用公式完成 ...
  • 如果输入的第一个字符是0,则怎么处理? 如果输入的是非0~9之间的字符怎么处理? 这是目前我能考虑到的问题。还是使用Matlab实现吧,主要是使用字符的ASCII值来进行这个问题的处理。clc clear closestrInput='-...
  • 算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列...2) 确定性算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。即对于相同的输入只能得出相同的输出。 3) 可行性一个算法是可行的,即
  • // 程序员面试100题(算法)之输入n整数,输出其中最小的k #include "stdafx.h" #include #include #include using namespace std; void findKLeastNumbers(multiset > &container, vector &v
  • 题目描述 字符串的输入输出处理。 输入 第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能...每行输出之间输出一个空行。 样例输入 2 www.dotcpp.com DOTCPP A C M D O T...
  • 输入整数x,y,z,请把这三数由小到大输出 分析 我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 ...
  • 编程实现输入10整数,并将其按降序排序并输出(可以使用选择排序算法或者冒泡排序算法)。 代码内容: /*编程实现输入10整数, 并将其按降序排序并输出( 可以使用选择排序算法或者冒泡排序算法)。*/ #...
  • 首先输入一个数字T(1 ),表示T个样例,每个样例输入一个仅包含大写英文字母的符串str,字符串长度用|str|来表示,1 |str| 。 输出描述 输出对应的小写字符串。 样例输入 3 ACMERGOGOGO YOUBADBAD ...
  • 来看一个排列的例子,它所做的工作是将输入一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一个典型的可用递归算法来实现的例子,我们来看一下利用...
  • 编写一个算法,其功能时给一维数组a输入任意6个整数,假设为5,7,4,8,9,1,然后建立一个如图3_4所示的方阵,并打印出来(屏幕输出) # include <iostream> using namespace std; int main() { int i,j,k,a...
  • 算法

    万次阅读 2018-02-08 00:13:09
    1.算法定义 ...如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
  • 常用的输入输出整理笔试时候常用的输入输出,可以使用#include &lt;bits/stdc++.h&gt;来次性输入所有的C++头文件包括:\#include &lt;iostream&gt; \#include &lt;cstdio&gt; \#include &...
  • 能被其中一个数(要指出哪一个数)整除; 不能被3,5,7任一个整除。   #include &lt;iostream&gt; using namespace std; int main() { int tmp; while(cin&gt;&gt;tmp) { int k = (tm...
  • 第一行数据是一个整数n ,第二行数据是n个整数 cin 输入 int n; cin &gt;&gt; n; vector&lt;int&gt; data(n); for (int i = 0; i &lt; n; ++i) cin &gt;&gt; data[i]; scanf...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 894,036
精华内容 357,614
关键字:

一个算法必须有输入又有输出