Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Commit 9cbd625

Browse files
authored
qt 1.0demo
初步开发完成,进行合并
2 parents d927b64 + 3542d9a commit 9cbd625

23 files changed

+1100
-0
lines changed

.gitignore

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
.*.swp
2+
build*/
3+
# Prerequisites
4+
*.d
5+
6+
# Compiled Object files
7+
*.slo
8+
*.lo
9+
*.o
10+
*.obj
11+
12+
# Precompiled Headers
13+
*.gch
14+
*.pch
15+
16+
# Compiled Dynamic libraries
17+
*.so
18+
*.dylib
19+
*.dll
20+
21+
# Fortran module files
22+
*.mod
23+
*.smod
24+
25+
# Compiled Static libraries
26+
*.lai
27+
*.la
28+
*.a
29+
*.lib
30+
31+
# Executables
32+
*.exe
33+
*.out
34+
*.app

.travis.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
sudo: false
2+
3+
language:
4+
- cpp
5+
6+
addons:
7+
apt:
8+
sources:
9+
- ubuntu-toolchain-r-test
10+
11+
before_install:
12+
- pip install --user cpp-coveralls
13+
14+
script:
15+
- cd 运动会问题/gtest
16+
- cmake -H. -Bbuild
17+
- cd build
18+
- cmake --build .
19+
- ctest
20+
- ./bin/unit_tests
21+
22+
after_success:
23+
- coveralls --root .. -E ".*external.*" -E ".*CMakeFiles.*" -E ".*test/.*.cpp.*"
24+
25+
notifications:
26+
email: false

readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
## 算法设计与分析作业
3+
[![Build Status](https://www.travis-ci.org/ZhaoQi99/SNNU_Junior_Project.svg?branch=dev)](https://www.travis-ci.org/ZhaoQi99/SNNU_Junior_Project)
34

45
计算机科学与技术(创新实验班)1601班
56
大三上学期必修课
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
2+
3+
project(calendar-demo CXX)
4+
5+
# place binaries and libraries according to GNU standards
6+
include(GNUInstallDirs)
7+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
8+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
9+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
10+
11+
# we use this to get code coverage
12+
if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
13+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
14+
endif()
15+
16+
add_subdirectory(src)
17+
18+
include(cmake/googletest.cmake)
19+
fetch_googletest(
20+
${PROJECT_SOURCE_DIR}/cmake
21+
${PROJECT_BINARY_DIR}/googletest
22+
)
23+
24+
enable_testing()
25+
add_subdirectory(test)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# code copied from https://crascit.com/2015/07/25/cmake-gtest/
2+
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
3+
4+
project(googletest-download NONE)
5+
6+
include(ExternalProject)
7+
8+
ExternalProject_Add(
9+
googletest
10+
SOURCE_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-src"
11+
BINARY_DIR "@GOOGLETEST_DOWNLOAD_ROOT@/googletest-build"
12+
GIT_REPOSITORY
13+
https://github.com/google/googletest.git
14+
GIT_TAG
15+
release-1.8.0
16+
CONFIGURE_COMMAND ""
17+
BUILD_COMMAND ""
18+
INSTALL_COMMAND ""
19+
TEST_COMMAND ""
20+
)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# the following code to fetch googletest
2+
# is inspired by and adapted after https://crascit.com/2015/07/25/cmake-gtest/
3+
# download and unpack googletest at configure time
4+
5+
macro(fetch_googletest _download_module_path _download_root)
6+
set(GOOGLETEST_DOWNLOAD_ROOT ${_download_root})
7+
configure_file(
8+
${_download_module_path}/googletest-download.cmake
9+
${_download_root}/CMakeLists.txt
10+
@ONLY
11+
)
12+
unset(GOOGLETEST_DOWNLOAD_ROOT)
13+
14+
execute_process(
15+
COMMAND
16+
"${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
17+
WORKING_DIRECTORY
18+
${_download_root}
19+
)
20+
execute_process(
21+
COMMAND
22+
"${CMAKE_COMMAND}" --build .
23+
WORKING_DIRECTORY
24+
${_download_root}
25+
)
26+
27+
# adds the targers: gtest, gtest_main, gmock, gmock_main
28+
add_subdirectory(
29+
${_download_root}/googletest-src
30+
${_download_root}/googletest-build
31+
)
32+
endmacro()

运动会问题/gtest/readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## google-test
2+
3+
google-test用于测试(支持trivis-ci)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# add_library(calendar "")
2+
#
3+
# target_sources(
4+
# calendar
5+
# PUBLIC
6+
# calendar2.hpp
7+
# PUBLIC
8+
# ${CMAKE_CURRENT_LIST_DIR}/calendar2.hpp
9+
# )
10+
#
11+
# target_include_directories(
12+
# calendar
13+
# PUBLIC
14+
# ${CMAKE_CURRENT_LIST_DIR}
15+
# )
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// Xie Keyi
2+
// 41612244
3+
4+
// 为方便build,所以使用hpp
5+
//TODO 重构可考虑把int全部换成自定义类型(如size_t)
6+
7+
8+
/*
9+
* API约定: 二维数组a[i][j]表示第i个选手第j天所遇到的对手
10+
*/
11+
12+
#include<iostream>
13+
class calendar
14+
{
15+
public:
16+
calendar( int _n ); // 构造函数,间接实现动态二维数组
17+
~calendar(); // 析构
18+
void print_to_crt(); // 输出到显示器
19+
void print_to_file(); // TODO 输出到文件
20+
protected:
21+
void solve(int left_top_x , int left_top_y , int sizex , int sizey );
22+
private:
23+
bool solve_finished = false ; //是否被solve过
24+
int n = 0 ; //数组大小
25+
int **a;
26+
};
27+
28+
29+
calendar::calendar( int _n )
30+
{
31+
n = _n;
32+
a = new int *[n+1];
33+
for( int i = 0 ; i < n + 1 ; i++)
34+
a[i] = new int[n+1];
35+
for( int i = 1 ; i <= n ; i++)
36+
a[i][1] = i ;
37+
}
38+
39+
calendar::~calendar()
40+
{
41+
for( int i = 0 ; i < n + 1 ; i++)
42+
delete[] a[i];
43+
delete[] a;
44+
}
45+
void calendar::solve( int left_top_x , int left_top_y , int sizex , int sizey)
46+
{
47+
int size = sizex * sizey;
48+
//TODO 只有非2^n会出现的情况。
49+
if( size < 3 )
50+
return ;
51+
// 当有4个元素的时候,左上角的给右下角,左下角的给右上角
52+
else if( size == 4 )
53+
{
54+
a[left_top_x+1][left_top_y+1] = a[left_top_x][left_top_y];
55+
a[left_top_x][left_top_y+1] = a[left_top_x+1][left_top_y];
56+
return ;
57+
}
58+
else
59+
{
60+
//分治
61+
solve( left_top_x , left_top_y , sizex / 2 , sizey / 2 ); // 先处理左上角
62+
solve( left_top_x + (sizex / 2 ) , left_top_y , sizex / 2 , sizey / 2 );//处理左下角
63+
// 左下角的复制到右上角
64+
for( int i = 0 ; i < sizex / 2 ; i++)
65+
for( int j = 0 ; j < sizey / 2 ; j++)
66+
a[left_top_x+i][left_top_y+sizey/2+j] = a[i+left_top_x+sizex/2][j+left_top_y];
67+
// 左上角的复制到右下角
68+
for( int i = 0 ; i < sizex / 2 ; i++)
69+
for( int j = 0 ; j < sizey / 2 ; j++)
70+
a[left_top_x+sizex/2+i][left_top_y+sizey/2+j] = a[i+left_top_x][j+left_top_y];
71+
return ;
72+
}
73+
}
74+
void calendar::print_to_crt()
75+
{
76+
if( !solve_finished )
77+
{
78+
solve( 1 , 1 , n , n );
79+
solve_finished = true;
80+
}
81+
for( int i = 1 ; i <= n ; i++)
82+
{
83+
for( int j = 1 ; j <= n ; j++)
84+
std::cout << a[i][j] << ' ';
85+
std::cout << std::endl ;
86+
}
87+
}
88+
89+
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/*
2+
Problem:比赛日程表
3+
Author:QiZhao
4+
Data:2018-09-30
5+
Description:
6+
Copyright 2018 QiZhao. All rights reserved.
7+
*/
8+
9+
#include<iostream>
10+
class calendar
11+
{
12+
public:
13+
calendar(int nn);// 构造函数,间接实现动态二维数组
14+
~calendar();// 析构函数
15+
void print_to_crt();// 输出到显示器
16+
void print_to_file();// TODO 输出到文件
17+
protected:
18+
void solve(int start,int n);
19+
private:
20+
bool solve_finished; //是否被solve过
21+
int n=0;//数组大小
22+
int **ans;
23+
};
24+
25+
calendar::calendar( int nn )
26+
{
27+
solve_finished=false;
28+
n = nn;
29+
ans = new int *[n+3];
30+
for( int i = 0 ; i <= n + 2 ; i++)
31+
ans[i] = new int[n+1];
32+
for( int i = 1 ; i <= n ; i++)
33+
ans[i][0] = i ;
34+
}
35+
36+
calendar::~calendar()
37+
{
38+
for( int i = 0 ; i < n + 1 ; i++)
39+
delete[] ans[i];
40+
delete[] ans;
41+
}
42+
43+
void calendar::print_to_crt()
44+
{
45+
if( !solve_finished )
46+
{
47+
solve( 1,n);
48+
solve_finished = true;
49+
}
50+
//cout << "\t\t\t" << n << "人日程表" << endl;
51+
int day=n%2==0?n-1:n;
52+
for(int i = 1; i <= n; i++)
53+
{
54+
for(int j = 0; j <= day; j++)
55+
{
56+
std::cout << ans[i][j] << " ";
57+
}
58+
std::cout << std::endl;
59+
}
60+
std::cout<<"--------------"<<std::endl;
61+
}
62+
void calendar::solve(int start, int n)
63+
{
64+
int temp;
65+
if(n == 2)//只有2人,直接安排赛程
66+
{
67+
ans[start][1] = ans[start + 1][0];
68+
ans[start + 1][1] = ans[start][0];
69+
}
70+
else
71+
{
72+
if(n % 2 == 1) //n为奇数
73+
{
74+
temp = ans[start + n][0];
75+
ans[start + n][0] = 0;
76+
solve(start, n + 1);
77+
ans[start+n][0] = temp;
78+
}
79+
else//n为偶数
80+
{
81+
int m = n / 2;
82+
solve(start, m);
83+
solve(start + m, m);
84+
if(m % 2 == 1)//m为奇数,安排第m+1天到第n-1天的赛程
85+
{
86+
for(int i = start; i < start + m; i++)//安排两组中轮空的2个选手比赛
87+
{
88+
for(int j = 1; j <= m; j++)
89+
{
90+
if(ans[i][j] == 0)
91+
{
92+
ans[i][j] = ans[i + m][0];
93+
ans[i + m][j] = ans[i][0];
94+
}
95+
}
96+
}
97+
for(int i = 1; i <= m; i++)
98+
{
99+
for(int j = m + 1; j < n; j++)
100+
{
101+
int temp = (i + j - 1) % m + m + 1;
102+
ans[start + i - 1][j] = ans[start + temp - 1][0];
103+
ans[start + temp - 1][j] = ans[start + i - 1][0];
104+
}
105+
}
106+
}
107+
else//m为偶数,安排第m天到第n-1天的赛程
108+
{
109+
for(int i = 1; i <= m; i++)
110+
{
111+
for(int j = m; j <= n - 1; j++)
112+
{
113+
int temp = (i + j - 1) % m + m + 1;
114+
ans[start + i - 1][j] = ans[start + temp - 1][0];
115+
ans[start + temp - 1][j] = ans[start + i - 1][0];
116+
}
117+
}
118+
}
119+
}
120+
}
121+
}
122+

0 commit comments

Comments
 (0)