分支结构
略
循环结构
求近似的圆周率
C
#include<stdio.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
double pi = 0;
double cnt = 0;
double item = 1;
while(fabs(item)>pow(0.1,n)){
item = pow(-1,cnt)/(2*cnt+1);
pi = pi + item *4;
cnt = cnt + 1;
}
printf("%lf",pi);
return 0;
}
C++
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
double pi = 0;
double cnt = 0;
double item = 1;
while(fabs(item)>pow(0.1,n)){
item = pow(-1,cnt)/(2*cnt+1);
pi = pi + item *4;
cnt = cnt + 1;
}
cout<<pi<<end;
return 0;
}
Java
public class piapprox{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double pi = 0;
double cnt = 0;
double item = 1;
while(Math.abs(item)>Math.pow(0.1,n)){
item = Math.pow(-1,cnt)/(2*cnt+1);
pi = pi + item *4;
cnt = cnt + 1;
}
System.out.println(pi);
}
}
Python
n = int(input())
pi = 0.
cnt = 0.
item = 1
while abs(item) > pow(0.1,n):
item = pow(-1,cnt) /(2*cnt+1)
pi = pi + item*4
cnt = cnt +1
print(pi)
求近似的自然对数e
C
#include<stdio.h>
#include<math.h>
int prod(int n){
int prd = 1;
for(int i = 1; i<= n;i++){
prd = prd * i;
}
return prd;
}
int main(){
int n;
scanf("%d",&n);
double e = 0;
int cnt = 0;
double item = 1;
while(fabs(item)>pow(0.1,n)){
item = 1.0 / prod(cnt);
e = e + item;
cnt = cnt + 1;
}
printf("%lf",e);
return 0;
}
C++
#include<iostream>
#include<cmath>
using namespace std;
int prod(int n){
int prd = 1;
for(int i = 1; i<= n;i++){
prd = prd * i;
}
return prd;
}
int main(){
int n;
cin>>n;
double e = 0;
int cnt = 0;
double item = 1;
while(fabs(item)>pow(0.1,n)){
item = 1.0 / prod(cnt);
e = e + item;
cnt = cnt + 1;
}
cout<<e<<endl;
return 0;
}
Java
public class eapprox{
public static int prod(int n){
int prd = 1;
for(int i = 1; i<= n;i++){
prd = prd * i;
}
return prd;
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double e = 0;
int cnt = 0;
double item = 1;
while(Math.abs(item)>Math.pow(0.1,n)){
item = 1.0 / prod(cnt);
e = e + item;
cnt = cnt + 1;
}
System.out.println(e);
}
}
Python
def prod(n):
prd = 1.0
for i in range(1,n+1):
prd = prd * i
return prd
n = int(input())
e = 0
cnt = 0
item = 1
while abs(item) > pow(0.1,n):
item = 1.0 /prod(cnt)
e = e + item
cnt = cnt +1
print(e)
递归
斐波那契数列
C
#include<stdio.h>
#include<math.h>
int fib(int n){
if(n==1){
return 1;
}
if(n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
int main(){
int n;
scanf("%d",&n);
printf("%d",fib(n));
return 0;
}
C++
#include<iostream>
#include<cmath>
using namespace std;
int fib(int n){
if(n==1){
return 1;
}
if(n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
int main(){
int n;
cin>>n;
cout<<fib(n)<<endl;
return 0;
}
Java
public class fib{
public static int fib(int n){
if(n==1){
return 1;
}
if(n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(fib(n));
}
}
Python
nin = int(input())
def fib(n):
if n == 1:
return 1
if n == 2:
return 1
return fib(n-1) + fib(n-2)
print(fib(nin))
分治
二分搜索
C
#include<stdio.h>
#include<math.h>
int binarysearch(int arr[],int l,int r,int x){
int mid = l+r/2;
if (arr[mid]==x){
return mid;
}
if (l >= r)
return -1;
else if(arr[mid] >x){
return binarysearch(arr,l,mid-1,x);
}
else
return binarysearch(arr,mid+1,r,x);
}
int main(){
int n;
int arr[1000];
int x;
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d",&arr[i]);
}
scanf("%d",&x);
printf("%d",binarysearch(arr,0,n,x));
return 0;
}
C++
#include<iostream>
#include<cmath>
using namespace std;
int binarysearch(int arr[],int l,int r,int x){
int mid = l+r/2;
if (arr[mid]==x){
return mid;
}
if (l >= r)
return -1;
else if(arr[mid] >x){
return binarysearch(arr,l,mid-1,x);
}
else
return binarysearch(arr,mid+1,r,x);
}
int main(){
int n;
int arr[1000];
int x;
cin>>n;
for(int i = 0;i<n;i++){
cin>>arr[i];
}
cin>>x;
cout<<binarysearch(arr,0,n-1,x)<<endl;
return 0;
}
Java
class binarysea{
public static int binarysearch(int arr[],int l,int r,int x){
int mid = (l+r)/2;
if (arr[mid]==x){
return mid;
}
else if (l >= r){
return -1;
}
else if(arr[mid] >x){
return binarysearch(arr,l,mid-1,x);
}
else
return binarysearch(arr,mid+1,r,x);
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[1000];
for(int i = 0;i<n;i++){
arr[i]=sc.nextInt();
}
int x = sc.nextInt();
System.out.println(binarysearch(arr,0,n,x));
}
}
Python
arr = input().split(" ")
x = input()
def binarysearch(arr,l,r,x):
mid = int((l + r)/2)
if arr[mid] == x:
return mid
elif l >= r:
return -1
elif arr[mid] > x:
return binarysearch(arr,l,mid-1,x)
else :
return binarysearch(arr,mid+1,r,x)
print(binarysearch(arr,0,len(arr)-1,x))
回溯--图的遍历
输入
6 6 //图的大小
# # # # # #
# * * # * #
# # * * * #
# * * # * #
# # # * * #
# # # # # #
3 3 // 起始点
C
#include<stdio.h>
int visited[1000][1000];
char graph[1000][1000];
int detect(int x,int y){
if(visited[x][y]!= 1 && graph[x][y] != '#') return 1;
else return 0;
}
void huisu(int x,int y){
visited[x][y] = 1;
printf("%d %d\n",x,y);
int arr[4][2] = {{x+1,y},{x-1,y},{x,y+1},{x,y-1}};
for(int i = 0;i < 4;i++){
if(detect(arr[i][0],arr[i][1])){
huisu(arr[i][0],arr[i][1]);//!!!
}
}
}
int main(){
int m,n;
scanf("%d %d",&m,&n);
for(int i = 0;i < m;i++){
for(int j = 0;j<n;j++){
scanf(" %c",&graph[i][j]);
}
}
int st_x,st_y;
scanf("%d %d",&st_x,&st_y);
huisu(st_x,st_y);
}
C++
#include<iostream>
#include<cmath>
using namespace std;
int visited[1000][1000];
char graph[1000][1000];
int detect(int x,int y){
if(visited[x][y]!= 1 && graph[x][y] != '#') return 1;
else return 0;
}
void huisu(int x,int y){
visited[x][y] = 1;
cout<<x<<" "<<y<<endl;
int arr[4][2] = {{x+1,y},{x-1,y},{x,y+1},{x,y-1}};//!!!
for(int i = 0;i < 4;i++){
if(detect(arr[i][0],arr[i][1])){
huisu(arr[i][0],arr[i][1]);
}
}
}
int main(){
int m,n;
cin>>m>>n;
for(int i = 0;i < m;i++){
for(int j = 0;j<n;j++){
cin>>graph[i][j];
}
}
int st_x,st_y;
cin>>st_x>>st_y;
huisu(st_x,st_y);
}
Java
import java.util.Scanner;
public class graphgothr{
public static int visited[][] = new int[1000][1000];
public static char graph[][] = new char[1000][1000];
public static boolean detect(int x,int y){
if(visited[x][y]!= 1 && graph[x][y] != '#') return true;
else return false;
}
public static void huisu(int x, int y) {
visited[x][y] = 1;
System.out.println(x + " " + y);
int arr[][] = { { x + 1, y }, { x - 1, y }, { x, y + 1 }, { x, y - 1 } };//!!!
for (int i = 0; i < 4; i++) {
if (detect(arr[i][0], arr[i][1])) {
huisu(arr[i][0], arr[i][1]);
}
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
graph[i][j] = sc.next().toCharArray()[0];
}
}
int st_x = sc.nextInt();
int st_y = sc.nextInt();
huisu(st_x, st_y);
}
}
Python
m,n = [ int(i) for i in input().split()]
graph = [ [j for j in input().split()] for i in range(m)]
st_x ,st_y = [ int(i) for i in input().split()]
visited = [[0 for j in range(n)]for i in range(m)]
def detect(x,y):
global visited,graph,m,n
if visited[x][y] != 1 and graph[x][y] != '#':
return True
else:
return False
def huisu(x,y):
global visited,graph,m,n
visited[x][y] = 1
print(x,y)
diec = [(x+1,y),(x-1,y),(x,y+1),(x,y-1)]#!!!
for i in range(4):
if detect(diec[i][0],diec[i][1]):
huisu(diec[i][0],diec[i][1])
huisu(st_x,st_y)
通用额外问题
- 掌握控制流。
- 掌握全局变量的使用。
- 掌握递归。
- 了解程序中标注了!!!的地方的使用技巧。
- 了解如何用递归树和主定理判断程序复杂度。
- 了解分治和回溯。
语言特性问题
C
- 了解math.h里的内容。
- 掌握浮点数的使用及浮点数运算时会出现的问题(提示:2进制表示方法)。
- 理解scanf(" %c",&graph[i][j])这段" %c"的处理方式。
- 了解C语言的字符处理。
- 掌握C语言利用函数返回值作为判断条件的使用。
C++
- 了解cmath里的内容。
- 掌握浮点数的使用及浮点数运算时会出现的问题(提示:2进制表示方法)。
- 了解C++的字符处理。
- 了解C++的泛型。
- 掌握C++里的Boolean变量。
Java
- 了解java.Math的内容。
- 掌握浮点数的使用及浮点数运算时会出现的问题(提示:2进制表示方法)。
- 理解"graph[i][j] = sc.next().toCharArray()[0]"这段的处理方式。
- 掌握java里的静态方法。
- 了解java里的String对应的方法。
- 掌握java里的Boolean变量。
Python
- 掌握python的浮点数处理。
- 掌握其中的列表推导式。
- 掌握python的global关键字。
- 掌握python的True、False表示。