编程算法,语言入门

一、关于在线判题系统oj的使用。

我使用的是中南的两个学长弄的pipioj,题目都很经典,数据结构与算法,字符串,暴力,搜索,贪心,dp的题都很全。

考虑到有同学之前没有接触过OJ,这里对OJ进行一些介绍,OJ是做编程练习的网站,我用的是中南的大佬做的pipioj,网址http//pipioj.online/,大家可以注册自己的账号。

可以在问题列表选择要做的题目,在本地IDE(Devc++,CodeBlocks)进行编码调试,之后再进入相应题目的提交页面,选择所用的编程语言进行提交。一般来说支持CC++javapython

二、基本语法介绍

(1)算数表达式

计算并输出1+3,7/5保留两位小数。

#include<bits/stdc++.h>//万能头文件,包含c++所有库
using namespace std;
int main(){
printf("%d\n",1+3);//printf为输出函数,%d表示为整型,\n表示换行
printf("%.2f\n",7.0/5);//%.2f,表示输出为浮点数,保留两位小数
return 0;
}

读入整型变量a,b,并输出a+b

#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;//定义两个整型变量a,b;
scanf("%d%d",&a,&b);//用scanf函数读入a,b
printf("%d\n",a+b);//输出a+b
return 0;
}

(2)顺序结构、分支结构、循环结构

顺序结构,输入a,b,交换a,b的值并输出。

#include<bits/stdc++.h>
using namespace std;
int main(){

int a,b;
scanf("%d%d",&a,&b);//输入a,b;
int c=a;//用c来放a的值
a=b;//把b的值赋给a
b=c;//再把a的值赋给b
printf("%d %d\n",a,b);
return 0;
}

分支结构,输入a,判断其是否同时为2,3,5的倍数,是的话输出yes,否则输出no

#include<bits/stdc++>
using namespace std;
int main(){
int a;
scanf("%d",&a);
if(a%2==0&&a%3==0&&a%5==0)//%是取模的运算,整除取余
{
printf("yes\n");
}
else
{
printf("no\n")
}
return 0;
}

循环结构,输入n,输入1,2,3,...n,数字用空格隔开,并在出n后换行

#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
if(i==n) printf("%d\n",i);//第n个数字换行
else printf("%d ",i);
}
return 0;
}

(3)数组、函数、递归

输入n,输出1~n全排列,n个数有多少种组合排列法

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
bool vis[1005];//标记数组,搜索的时候用 
int a[N]; 
void dfs(int n,int dep){//要组合一个排列,思路有点想深度优先搜索 
	if(dep==n){
		for(int i=0;i<n;i++){
			if(i!=n-1) printf("%d",a[i]);
			else printf("%d\n",a[i]);//最后要换行 
		}
		return;
	}//搜到到一个排列时
	for(int i=n;i>=1;i--){
		if(!vis[i]){
			vis[i]=true;
			a[dep]=i;
			dfs(n,dep+1);//递归调用
			vis[i]=false;//回溯 
		}
	} 
}
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){//多组输入,读入多组数据 
		memset(vis,0,sizeof(vis));//每一次都要把标记数组置false,因为上一组数据使用过vis。 
	    dfs(n,0);//相当于一个深度优先搜索函数 
	}

	return 0;
} 

最后这个代码用到了深度优先搜索的算法,深度优先搜索在数据结构中也用来遍历图,大家要学会把算法用来解决其他问题。感觉基础吃力的同学,要多看基础,多敲基础的代码,敲着代码来理解会好很多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值