diff --git "a/data/1.dailycode\345\210\235\351\230\266/1.cpp/30.exercises/solution.md" "b/data/1.dailycode\345\210\235\351\230\266/1.cpp/30.exercises/solution.md" index 1e47166754216293c10fb74ee450a5988a04cfff..555211e1130c2c47ccb63f3c01777a409e724ec9 100644 --- "a/data/1.dailycode\345\210\235\351\230\266/1.cpp/30.exercises/solution.md" +++ "b/data/1.dailycode\345\210\235\351\230\266/1.cpp/30.exercises/solution.md" @@ -2,7 +2,7 @@ 1,2,4,2,3,6,12,6,3,....求第n项值 -## template +以下程序实现了这一功能,请你填补空白处内容: ```cpp #include @@ -50,16 +50,70 @@ int main() } ``` -## 答案 +## template ```cpp -for (i = 2; i <= (*y); i++) +#include +int fun(int n, int *x, int *y) +{ + int sum = 0, i; + int size = 0; + int dd = 1; + for (i = 1; i <= (*x); i++) + { + sum += (2 * i - 1); + } + if (sum == n) + { + *y = 2 * (*x) - 1; + return (*x); + } + else if (sum > n) { - if (i <= (*x)) - dd *= 2; - else - dd /= 2; + (*y) = n - (sum - (2 * (*x) - 1)); + size = 2 * (*x) - 1; + dd = (*x); + for (i = 2; i <= (*y); i++) + for (i = 2; i <= (*y); i++) + { + if (i <= (*x)) + dd *= 2; + else + dd /= 2; + } + return dd; } + else + { + (*x)++; + return fun(n, x, y); + } +} +int main() +{ + int n; + int row = 1, col = 0; + int val; + row = 1; + col = 0; + printf("请输入n:"); + scanf("%d", &n); + val = fun(n, &row, &col); + printf("第%d项是:%d\n", n, val); + return 0; +} +``` + +## 答案 + +```cpp +for (i = 2; i <= (*y); i++) +{ + if (i <= (*x)) + dd *= 2; + else + dd /= 2; +} ``` ## 选项 @@ -68,34 +122,34 @@ for (i = 2; i <= (*y); i++) ```cpp for (i = 2; i <= (*y); i++) - { - if (i <= (*x)) - dd /= 2; - else - dd *= 2; - } +{ + if (i <= (*x)) + dd /= 2; + else + dd *= 2; +} ``` ### B ```cpp for (i = 2; i <= (*y); i++) - { - if (i <= (*x)) - dd += 2; - else - dd -= 2; - } +{ + if (i <= (*x)) + dd += 2; + else + dd -= 2; +} ``` ### C ```cpp for (i = 2; i <= (*y); i++) - { - if (i <= (*x)) - dd -= 2; - else - dd += 2; - } +{ + if (i <= (*x)) + dd -= 2; + else + dd += 2; +} ``` \ No newline at end of file diff --git "a/data/1.dailycode\345\210\235\351\230\266/1.cpp/31.exercises/solution.md" "b/data/1.dailycode\345\210\235\351\230\266/1.cpp/31.exercises/solution.md" index b0ff0d9ab30906a350fa5064d9b50dc6220703f2..fa225fa65f155d2240160a92148dd9ef6d58a5d1 100644 --- "a/data/1.dailycode\345\210\235\351\230\266/1.cpp/31.exercises/solution.md" +++ "b/data/1.dailycode\345\210\235\351\230\266/1.cpp/31.exercises/solution.md" @@ -2,7 +2,7 @@ 例如:字符串中的内容为:a1Ab1D2,1 @@ -25,6 +25,29 @@ int main() } ``` +## template + +```cpp +#include +#include +using namespace std; +int solve(string s) +{ + if (s.length() == 0) return 0; + int n = 0; + for (int i = 1; i < s.length(); i++) + if (s.c_str()[i] < s.c_str()[i - 1]) n++; + return n; +} +int main() +{ + string s = "a1Ab1D2"; + int n = solve(s); + cout << n << endl; + return 0; +} +``` + ## 答案 ```cpp diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/1.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/1.exercises/solution.md" index 98bd412192c3bf6c219ab104ce179036a2c7cd02..57521b8d48dcf0cded4221ee76c680454ea78006 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/1.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/1.exercises/solution.md" @@ -1,15 +1,63 @@ # 移动字符串 给定一个字符串长度为 nn 的字符串 s1 (10 +#include +using namespace std; +void reverse(char *a, int start, int end) +{ + int i, j, temp; + for (i = start, j = end; i < j; i++, j--) + { + temp = a[i]; + a[i] = a[j]; + a[j] = temp; + } +} +void turnleft(char *a, int i, int n) +{ + int left = i % n; + if (left == 0) + return; + ______________; + return; +} +int main() +{ + char a[1024]; + int i; + cin >> i; + cin >> a; + int n = strlen(a); + turnleft(a, i, n); + cout << a << endl; +} +``` ## template @@ -32,7 +80,9 @@ void turnleft(char *a, int i, int n) int left = i % n; if (left == 0) return; - ______________ + reverse(a, 0, left - 1); + reverse(a, left, n - 1); + reverse(a, 0, n - 1); return; } int main() diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/10.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/10.exercises/solution.md" index 4131997fc9abdfca5bdc55c1b9019d8e46949b7f..bbbac7efe6d4cd7ac06ddd9c9fc96a45d82b680e 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/10.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/10.exercises/solution.md" @@ -2,39 +2,70 @@
一个数如果恰好等于它的所有因子之和,这个数就称为“完数”。统计自然数 1 — 100 间完数的个数。
+以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +int perfect() +{ + int i, x, sum, cnt = 0; + for (i = 1; i <= 100; i++) + { + sum = 0; + for (x = 1; x < i; x++) + { + _____________; + } + if (i == sum) + { + cnt++; + printf("%d ", i); + } + } + return cnt; +} +int main() +{ + printf("\ncount=%d\n", perfect()); + return 0; +} +``` + ## template ```cpp -#include +#include int perfect() { - int i,x,sum,cnt=0; - for(i=1;i<=100;i++) - { - sum=0; - for(x=1;x +#include +int main() +{ + int n, i, j, t; + scanf("%d", &n); + int *a = (int *)malloc(n * sizeof(int)); + for (i = 0; i < n; i++) + { + scanf("%d", &a[i]); + } + int cout = 0; + for (i = 0; i < n; i++) + { + for (j = i + 1; j < n; j++) + { + for (t = 0; t < n; t++) + ____________; + } + } + printf("%d", cout); + free(a); + return 0; +} +``` + ## template ```cpp @@ -19,33 +58,34 @@ #include int main() { - int n,i,j,t; - scanf("%d",&n); - int* a = (int*)malloc(n*sizeof(int)); - for(i=0;i= a[t]) + cout++; ``` ### C ```cpp - +if (a[i] + a[j] < a[t]) + cout++; ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/12.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/12.exercises/solution.md" index 7434c9c6a6407f6f5abce46c814357a54b8165c0..698eeb91d2d19d344c4b79ccaee8596ff1d83301 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/12.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/12.exercises/solution.md" @@ -1,20 +1,34 @@ # 难倒数万人的小学数学题 汉堡包在大街上大摇大摆的走着,看着手机上一道难倒数万人的小学数学题: + +```json 1 + 1 = 0 1 + 6 = 1 6 + 6 = 2 8 + 1 = 2 8 + 6 = 3 +``` + 汉堡包看完之后发现上面这些加法的答案就是看1,6,8中圈圈的个数嘛! + 突然之间,所有大厦上的LED屏幕上的广告全部变成数字1,6,8三个数字的随机闪现。 + 现给你一块n*m的LED屏幕,上面有且仅有一个数字(1,6,or 8),请你输出你看见的那个字母。 -输入格式: + +**输入格式:** + 第一行输入两个整数n,m(2<= m, n <= 1000); + 接下来n行,每行由m个数字0和1组成,其中1表示数字1,6,8的组成部分。 -输出格式: + +**输出格式:** + 输出一个整数,代表图形表示的数字。 -输入样例: + +**输入样例:** + +```json 7 7 0 0 0 0 0 0 0 0 0 1 1 1 0 0 @@ -23,8 +37,56 @@ 0 0 1 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 -输出样例: +``` + +**输出样例:** + +```json 8 +``` + +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +#include +#include +#include +#include +#include +#include +using namespace std; +int main() +{ + int i, j, k = 1; + int n, m; + int num[1010] = {0}; + int num_cmp = 0; + int flag = 1; + int led[1005][1005]; + cin >> n >> m; + for (i = 1; i <= n; i++) + { + for (j = 1; j <= m; j++) + { + cin >> led[i][j]; + if (led[i][j] == 1) + num[k]++; + } + if (num[k] != 0) + k++; + } + num_cmp = num[k - 1]; + ______________________; + if (flag == 1) + cout << "1" << endl; + else if (flag == 2) + cout << "8" << endl; + else + cout << "6" << endl; + return 0; +} +``` ## template @@ -37,39 +99,56 @@ #include #include using namespace std; -int main(){ - int i,j,k=1; - int n,m; - int num[1010]={0}; - int num_cmp=0; - int flag=1; - int led[1005][1005]; - cin >> n >> m; - for(i=1;i<=n;i++){ - for(j=1;j<=m;j++){ - cin >> led[i][j]; - if(led[i][j]==1) num[k]++; - } - if(num[k]!=0)k++; - } - num_cmp=num[k-1]; - for(i=k-1;i>0;i--){ - if(num[i]> n >> m; + for (i = 1; i <= n; i++) + { + for (j = 1; j <= m; j++) + { + cin >> led[i][j]; + if (led[i][j] == 1) + num[k]++; + } + if (num[k] != 0) + k++; + } + num_cmp = num[k - 1]; + for (i = k - 1; i > 0; i--) + { + if (num[i] < num_cmp) + { + flag++; + num_cmp = num[i]; + } + } + if (flag == 1) + cout << "1" << endl; + else if (flag == 2) + cout << "8" << endl; + else + cout << "6" << endl; + return 0; } ``` ## 答案 ```cpp - +for (i = k - 1; i > 0; i--) +{ + if (num[i] < num_cmp) + { + flag++; + num_cmp = num[i]; + } +} ``` ## 选项 @@ -77,17 +156,36 @@ int main(){ ### A ```cpp - +for (i = k - 1; i > 0; i--) +{ + if (num[i] < num_cmp) + { + flag++; + } +} ``` ### B ```cpp - +for (i = k - 1; i > 0; i--) +{ + if (num[i] < num_cmp) + { + num_cmp = num[i]; + } +} ``` ### C ```cpp - +for (i = k - 1; i > 0; i--) +{ + if (num[i] > num_cmp) + { + flag++; + num_cmp = num[i]; + } +} ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/13.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/13.exercises/solution.md" index d955dee7c03c7ab16c1a463c2e3e5f672c84a9bf..354b34b7538bdb8d1a5bf6ab537ec30d1ae5da1a 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/13.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/13.exercises/solution.md" @@ -1,46 +1,85 @@ # 约分 编写程序,要求用户输入一个分数,然后将其约分为最简式。如: + 输入一个分数:8/12 + 最简分式:2/3 +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +#include +int main() +{ + int a, b, x, y, c; + printf("输入一个分式:"); + scanf("%d/%d", &a, &b); + _________________; + while (c) + { + x = y; + y = c; + c = x % y; + } + if (b / y != 1) + printf("最简分式为:%d/%d", a / y, b / y); + else + printf("最简分式为:%d", a / y); + return 0; +} +``` + ## template ```cpp -#include -#include +#include +#include int main() { - int a,b,x,y,c; - printf("输入一个分式:"); - scanf("%d/%d",&a,&b); - if(a +#include +#include +int cmp(const void *a, const void *b) +{ + return strcmp(*(char **)a, *(char **)b); +} +int main(int argc, char *argv[]) +{ + int n = 0; + int i; + printf("how many words?\n"); + scanf("%d", &n); + char **s = new char *[n]; + for (i = 0; i < n; i++) + { + s[i] = new char[100]; + scanf("%s", s[i]); + char *t = s[i]; + while (*t != '\0') + { + _______________; + } + } + qsort(s, n, sizeof(char *), cmp); + for (i = 0; i < n; i++) + { + printf("%s\n", s[i]); + } + return 0; +} +``` + ## template ```cpp - #include +#include #include #include -int cmp(const void * a, const void * b) +int cmp(const void *a, const void *b) { - return strcmp(*(char **)a, *(char **)b); + return strcmp(*(char **)a, *(char **)b); } -int main(int argc, char* argv[]) +int main(int argc, char *argv[]) { - int n = 0; - int i; - printf("how many words?\n"); - scanf("%d", &n); - char ** s = new char *[n]; - for (i = 0; i < n; i++) - { - s[i] = new char[100]; - scanf("%s", s[i]); - char * t = s[i]; - while (*t != '\0') - { - if (t == s[i] && (*t >= 'a' && *t <= 'z')) *t = *t - 'a' + 'A'; - if (t > s[i] && (*t >= 'A' && *t <= 'Z')) *t = *t - 'A' + 'a'; - t++; - } - } - qsort(s, n, sizeof(char *), cmp); - for (i = 0; i < n; i++) - { - printf("%s\n", s[i]); - } - return 0; + int n = 0; + int i; + printf("how many words?\n"); + scanf("%d", &n); + char **s = new char *[n]; + for (i = 0; i < n; i++) + { + s[i] = new char[100]; + scanf("%s", s[i]); + char *t = s[i]; + while (*t != '\0') + { + if (t == s[i] && (*t >= 'a' && *t <= 'z')) + *t = *t - 'a' + 'A'; + if (t > s[i] && (*t >= 'A' && *t <= 'Z')) + *t = *t - 'A' + 'a'; + t++; + } + } + qsort(s, n, sizeof(char *), cmp); + for (i = 0; i < n; i++) + { + printf("%s\n", s[i]); + } + return 0; } ``` ## 答案 ```cpp - +if (t == s[i] && (*t >= 'a' && *t <= 'z')) + *t = *t - 'a' + 'A'; +if (t > s[i] && (*t >= 'A' && *t <= 'Z')) + *t = *t - 'A' + 'a'; +t++; ``` ## 选项 @@ -51,17 +93,29 @@ int main(int argc, char* argv[]) ### A ```cpp - +if (t == s[i] && (*t >= 'a' && *t <= 'z')) + t = t - 'a' + 'A'; +if (t > s[i] && (*t >= 'A' && *t <= 'Z')) + t = t - 'A' + 'a'; +t++; ``` ### B ```cpp - +if (t == s[i] && (*t >= 'a' && *t <= 'z')) + t = t - 'A' + 'a'; +if (t > s[i] && (*t >= 'A' && *t <= 'Z')) + t = t - 'a' + 'A'; +t++; ``` ### C ```cpp - +if (t == s[i] && (*t >= 'a' && *t <= 'z')) + *t = *t - 'A' + 'a'; +if (t > s[i] && (*t >= 'A' && *t <= 'Z')) + *t = *t - 'a' + 'A'; +t++; ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/15.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/15.exercises/solution.md" index fa91f80c84a58eefba35b07c645e03749f026d3d..dea7371ba5d385f3cb32296dc217544f74b4b1e0 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/15.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/15.exercises/solution.md" @@ -1,22 +1,62 @@ # 国名排序 -【字符数组】国名排序 -Description: +**题目描述:** + 小李在准备明天的广交会,明天有来自世界各国的客房跟他们谈生意,小李要尽快的整理出名单给经理,你能帮他把客户来自的国家按英文字典次序排好吗? 例如小李手上有来自加拿大,美国,中国的名单,排好的名单应是美国,加拿大,中国 -Input -  第一行为一个n(n<=100)表示n个国家,第2行到第n+1行分别为n个国家的名字. -Output -  输出共计n行,为n个国家按字典顺序的排列,每行为一个国家 -Sample Input: - 3 - China - Canada - America -Sample Output: - America - Canada - China + +**输入** + +第一行为一个n(n<=100)表示n个国家,第2行到第n+1行分别为n个国家的名字. + +**输出** + +输出共计n行,为n个国家按字典顺序的排列,每行为一个国家 + +**输入样例:** + +```json +3 +China +Canada +America +``` + +**输出样例:** + +```json +America +Canada +China +``` + +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +#include +using namespace std; +string a[1000]; +int main() +{ + int i, n; + cin >> n; + for (i = 1; i <= n; i++) + { + cin >> a[i]; + } + for (i = 1; i <= n; i++) + { + for (int j = i + 1; j <= n; j++) + { + _________; + } + } + for (int i = 1; i <= n; i++) + cout << a[i] << endl; + return 0; +} +``` ## template @@ -27,30 +67,31 @@ using namespace std; string a[1000]; int main() { - int i,n; - cin>>n; - for(i=1; i<=n; i++) - { - cin>>a[i]; - } - for(i=1;i<=n;i++) - { - for(int j=i+1;j<=n;j++) - { - if(a[i]>a[j]) - swap(a[i],a[j]); - } - } - for(int i=1;i<=n;i++) - cout<> n; + for (i = 1; i <= n; i++) + { + cin >> a[i]; + } + for (i = 1; i <= n; i++) + { + for (int j = i + 1; j <= n; j++) + { + if (a[i] > a[j]) + swap(a[i], a[j]); + } + } + for (int i = 1; i <= n; i++) + cout << a[i] << endl; + return 0; } ``` ## 答案 ```cpp - +if (a[i] > a[j]) + swap(a[i], a[j]); ``` ## 选项 @@ -58,17 +99,20 @@ int main() ### A ```cpp - +if (a[i] < a[j]) + swap(a[i], a[j]); ``` ### B ```cpp - +if (a[i] <= a[j]) + swap(a[i], a[j]); ``` ### C ```cpp - +if (a[i] == a[j]) + swap(a[i], a[j]); ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/16.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/16.exercises/solution.md" index 72625aa4e00d3b8e46cfaa86c4a010fe0596d9fe..445a43553dcac54bf459104f2a87ed0fb7c29488 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/16.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/16.exercises/solution.md" @@ -2,34 +2,58 @@ 目前有一个长度为 n 的木棍,当做直角三角形的斜边。A,B,C要从许多整数长度的木棍中选出三根,分别长为 a, b, c。 现在,蒜头君和花椰妹的木棍组成一条直角边长度为 a + b,白菜君组成另外一条直角边 c,并且要求 a + b ≤ c。请问一共可以有多少种取木棍的方案。 提示:a = 3, b = 4 与 a = 4, b = 3 算作同一种方案。 +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +int main() +{ + int n; + int cnt = 0; + scanf("%d", &n); + for (int a = 1; a < n; a++) + _______________; + printf("一共有%d种方案", cnt); + return 0; +} +``` + ## template ```cpp #include int main() { - int n; - int cnt = 0; - scanf("%d", &n); - for (int a = 1; a < n; a++) - for (int b = a; b < n - a; b++) - for (int c = 1; c < n; c++) - { - if ((a+b)*(a+b)+c*c==n*n) - { - printf("a=%d b=%d c=%d\n", a, b, c); - cnt++; - } - } - printf("一共有%d种方案", cnt); - return 0; + int n; + int cnt = 0; + scanf("%d", &n); + for (int a = 1; a < n; a++) + for (int b = a; b < n - a; b++) + for (int c = 1; c < n; c++) + { + if ((a + b) * (a + b) + c * c == n * n) + { + printf("a=%d b=%d c=%d\n", a, b, c); + cnt++; + } + } + printf("一共有%d种方案", cnt); + return 0; } ``` ## 答案 ```cpp - +for (int b = a; b < n - a; b++) + for (int c = 1; c < n; c++) + { + if ((a + b) * (a + b) + c * c == n * n) + { + printf("a=%d b=%d c=%d\n", a, b, c); + cnt++; + } + } ``` ## 选项 @@ -37,17 +61,41 @@ int main() ### A ```cpp - +for (int b = a; b < n - a; b++) + for (int c = 1; c < n; c++) + { + if ((a + b) * (a + b) + c * c >= n * n) + { + printf("a=%d b=%d c=%d\n", a, b, c); + cnt++; + } + } ``` ### B ```cpp - +for (int b = a; b < n - a; b++) + for (int c = 1; c < n; c++) + { + if ((a + b) * (a + b) + c * c <= n * n) + { + printf("a=%d b=%d c=%d\n", a, b, c); + cnt++; + } + } ``` ### C ```cpp - +for (int b = a; b < n - a; b++) + for (int c = 1; c < n; c++) + { + if ((a + b) * (a + b) + c * c > n * n) + { + printf("a=%d b=%d c=%d\n", a, b, c); + cnt++; + } + } ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/17.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/17.exercises/solution.md" index f4c518701c47f2f6208020e687d0f9c95335df5f..66218540b7994a4b840d41fed3fc3d8d10afcc25 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/17.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/17.exercises/solution.md" @@ -10,42 +10,88 @@ 输出
输出共一行 m 个整数,表示每回合报出的编号,每两个整数之间一个空格,最后一个数后面没有空格。

+以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +#include +#include +#include +using namespace std; +int ai[100010], qi[100010]; +int main() +{ + int a, q; + while (cin >> a >> q) + { + for (int i = 0; i < a; i++) + cin >> ai[i]; + for (int i = 0; i < q; i++) + cin >> qi[i]; + for (int i = 0; i < q; i++) + { + int left = 0, right = a - 1, mid; + while (left < right) + { + mid = (left + right) >> 1; + if (ai[mid] <= qi[i]) + left = mid + 1; + else + right = mid; + } + _______________________; + i ? cout << " " << ai[left - 1] : cout << ai[left - 1]; + } + cout << endl; + } + return 0; +} +``` + ## template ```cpp -#include -#include -#include -#include +#include +#include +#include +#include using namespace std; int ai[100010], qi[100010]; int main() { - int a, q; - while (cin >> a >> q) - { - for (int i = 0; i < a; i++)cin >> ai[i]; - for (int i = 0; i < q; i++)cin >> qi[i]; - for (int i = 0; i < q; i++) { - int left = 0, right = a - 1, mid; - while (left < right) { - mid = (left + right) >> 1; - if (ai[mid] <= qi[i])left = mid + 1; - else right = mid; - } - if (left - 1 < 0 || ai[left] < qi[i])left++; - i ? cout << " " << ai[left - 1] : cout << ai[left - 1]; - } - cout << endl; - } - return 0; + int a, q; + while (cin >> a >> q) + { + for (int i = 0; i < a; i++) + cin >> ai[i]; + for (int i = 0; i < q; i++) + cin >> qi[i]; + for (int i = 0; i < q; i++) + { + int left = 0, right = a - 1, mid; + while (left < right) + { + mid = (left + right) >> 1; + if (ai[mid] <= qi[i]) + left = mid + 1; + else + right = mid; + } + if (left - 1 < 0 || ai[left] < qi[i]) + left++; + i ? cout << " " << ai[left - 1] : cout << ai[left - 1]; + } + cout << endl; + } + return 0; } ``` ## 答案 ```cpp - +if (left - 1 < 0 || ai[left] < qi[i]) + left++; ``` ## 选项 @@ -53,17 +99,20 @@ int main() ### A ```cpp - +if (left - 1 < 0) + left++; ``` ### B ```cpp - +if (ai[left] < qi[i]) + left++; ``` ### C ```cpp - +if (left - 1 < 0 && ai[left] < qi[i]) + left++; ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/18.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/18.exercises/solution.md" index d99ab4dff7c0ddac05696a9a73b2478cfc0d38a4..14ba51dd34010e76c6e1c9470aec7d746229e2a8 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/18.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/18.exercises/solution.md" @@ -1,17 +1,76 @@ # 不喜欢带钱的小C -题目描述: +**题目描述:** + 小C不喜欢带钱,有一次竟被他碰上了一家不能使用移动支付(也不能找钱)的神秘商店。请问小C至少准备多少张RMB才能恰好支付n元。RMB的面额有100元,50元,20元,10元,5元,1元。 -输入格式: + +**输入格式:** + 输入一个整数n -输出格式: + +**输出格式:** + 最少带几张。 -样例输入1: + +**样例输入1:** + +```json 50 -样例输出1: +``` + +**样例输出1:** + +```json 1 -约定: +``` + +**约定:** + +```json 1<=n<=100 +``` + +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +using namespace std; +int solve(int tar, int * meta, int metan, int * seed = NULL, int seedn = 0) +{ + if (tar == 0) + { + return seedn; + } + int min = -1; + int m; + int * seed1 = new int[seedn + 1]; + if (seed) + memcpy(seed1, seed, sizeof(int) * seedn); + for (int i = 0; i < metan; i++) + { + if (meta[i] <= tar) + { + seed1[seedn] = meta[i]; + _____________________; + if (m != -1 && (min == -1 || min > m)) + min = m; + break; + } + } + delete[] seed1; + return min; +} +int main() +{ + int arr[] = { 100, 50, 20, 10, 5, 1 }; + int n = 6; + int total; + cin >> total; + int result = solve(total, arr, n); + cout << result << endl; + return 0; +} +``` ## template @@ -58,7 +117,7 @@ int main() ## 答案 ```cpp - +m = solve(tar - meta[i], meta, metan, seed1, seedn + 1); ``` ## 选项 @@ -66,17 +125,17 @@ int main() ### A ```cpp - +m = solve(tar - meta[i], meta, metan, seed1, seedn); ``` ### B ```cpp - +m = solve(tar + meta[i], meta, metan, seed1, seedn); ``` ### C ```cpp - +m = solve(tar + meta[i], meta, metan, seed1, seedn + 1); ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/2.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/2.exercises/solution.md" index ebe26578b0364a25a0aa46b1e5fa9bb1e9ebe5e8..ab21c82353df2222eaf22cb3efdf759ca5ef3278 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/2.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/2.exercises/solution.md" @@ -1,10 +1,18 @@ # 数字归类 -题目描述 +**题目描述** + 一个数里面若含有数字1,则归类到1字类,含有数字2,则归类到2字类,所以一个数可能同时归类到不同的数字类。对于0、1、2、3、4、5、6、7、8、9这十个数字类,因研究需要,急于想知道某一堆数中,究竟归类到这些数字类的个数。 -样例输入 + +**样例输入** + +```json 123 456 175 2 61 9998 12 5053 382 -样例输出 +``` + +**样例输出** + +```json 0: 1 1: 4 2: 4 @@ -15,9 +23,41 @@ 7: 1 8: 2 9: 1 +``` + 提示 + 注意:输出结果中冒号后面有空格 +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +#include +int result[10]; +int main(void) +{ + memset(result, 0, sizeof(int) * 10); + int n; + int arr[10]; + while (scanf("%d", &n) != EOF) + { + memset(arr, 0, sizeof(int) * 10); + if (n == 0) + arr[0] = 1; + while (n > 0) + { + ____________; + } + for (int i = 0; i < 10; i++) + result[i] += arr[i]; + } + for (int i = 0; i < 10; i++) + printf("%d: %d\n", i, result[i]); + return 0; +} +``` + ## template ```cpp @@ -36,7 +76,8 @@ int main(void) arr[0] = 1; while (n > 0) { - ____________ + arr[n % 10] = 1; + n = n / 10; } for (int i = 0; i < 10; i++) result[i] += arr[i]; diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/3.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/3.exercises/solution.md" index 5391420f6594e80213e2baf1009357ab4939d321..d5112dbb987e780aa2cded0b5f658f6b180becf4 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/3.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/3.exercises/solution.md" @@ -1,14 +1,41 @@ # 利用字母组成图形 利用字母可以组成一些美丽的图形,下面给出了一个例子: + +```json ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC +``` + 这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。 + 输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。 +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +#include +int main() +{ + int m, n; + scanf("%d%d", &n, &m); + int i, j; + for (i = 0; i < n; i++) + { + for (j = 0; j < m; j++) + { + ______________; + } + printf("\n"); + } + return 0; +} +``` + ## template ```cpp @@ -23,7 +50,7 @@ int main() { for (j = 0; j < m; j++) { - ______________ + printf("%c", 65 + abs(i - j)); } printf("\n"); } diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/4.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/4.exercises/solution.md" index 4e58868c8ae196ace419086e3a15eb04353f18f8..eb9b298b4ddfc7233b40ec808008874a80d47374 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/4.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/4.exercises/solution.md" @@ -5,6 +5,31 @@

 

+以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +int main() +{ + int a[10], i, n; + int isfind = 0; + printf("please set array values:"); + for (i = 0; i < 10; i++) + scanf("%d", &a[i]); + printf("please enter one num:"); + scanf("%d", &n); + for (i = 0; i < 10; i++) + { + ______________; + } + if (isfind) + printf("\n"); + else + printf("not find\n"); + return 0; +} +``` + ## template ```cpp @@ -20,7 +45,11 @@ int main() scanf("%d", &n); for (i = 0; i < 10; i++) { - ______________ + if (a[i] < n) + { + isfind = 1; + printf("%d ", a[i]); + } } if (isfind) printf("\n"); diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/5.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/5.exercises/solution.md" index 15b259953d1fc700a43ca958d97e060971a27fa3..ce6c18047bd1099f794707fb6213911ea900b2c1 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/5.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/5.exercises/solution.md" @@ -15,6 +15,40 @@
 9,1,1
+以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +int main() +{ + int a[6][6]; + int m, n; + int i, j; + int max; + int indexx = 0, indexy = 0; + scanf("%d %d", &m, &n); + for (i = 0; i < m; i++) + { + for (j = 0; j < n; j++) + { + scanf("%d", &a[i][j]); + if (i == 0 && j == 0) + { + max = a[i][j]; + indexx = 0; + indexy = 0; + } + else + { + _____________; + } + } + } + printf("%d,%d,%d\n", max, indexx, indexy); + return 0; +} +``` + ## template ```cpp @@ -40,7 +74,12 @@ int main() } else { - _____________ + if (a[i][j] > max) + { + max = a[i][j]; + indexx = i; + indexy = j; + } } } } diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/6.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/6.exercises/solution.md" index 937e7b9176739a85514391a76046d780dd2e72dc..cb044bf52361abe6098305ea2bb0cb25be09ca34 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/6.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/6.exercises/solution.md" @@ -2,8 +2,39 @@ 已知一个浮点数A(0 +#include +int main() +{ + float A = 0.2f; + int x = 0; + if (A < 0) + { + x = 1; + A = 1 / A; + } + float delta = 1; + int B = 1, C = 1; + do + { + ____________; + } while (delta > 0.000001); + if (x == 0) + printf("%d / %d", C, B - 1); + else + printf("%d / %d", B - 1, C); + return 0; +} +``` ## template @@ -23,7 +54,9 @@ int main() int B = 1, C = 1; do { - ____________ + C = (int)(B * A); + delta = fabs(C / (float)B - A); + B++; } while (delta > 0.000001); if (x == 0) printf("%d / %d", C, B - 1); diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/7.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/7.exercises/solution.md" index 1de9536903a9f1dc64abcff231c579664a3415bb..d8245a81fe46fb16a27279e0a5be60e9eaee09f3 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/7.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/7.exercises/solution.md" @@ -1,47 +1,107 @@ # 矩阵问题 -题目描述 +**题目描述** + 编写以下函数: + (1)在一个二维数组中形成以下形式的n阶矩阵: -```json -[1 1 1 1 1 -2 1 1 1 1 -3 2 1 1 1 -4 3 2 1 1 -5 4 3 2 1] -``` + ```json + [1 1 1 1 1 + 2 1 1 1 1 + 3 2 1 1 1 + 4 3 2 1 1 + 5 4 3 2 1] + ``` (2)去掉靠边的元素,生成新的n-2阶矩阵; + (3)求生成的n阶矩阵主对角线上的元素之和; + (4)以方阵形式输出数组。 + 在main函数中调用以上函数进行测试。 -输入 + +**输入** + 输入生成矩阵的阶数(n>=2) -输出 + +**输出** + 以方阵形式输出生成的n阶矩阵、去掉靠边的元素生成的新的n-2阶矩阵、以及生成的n阶矩阵主对角线上的元素之和,最后一行要回车 -样例输入 + +**样例输入** + +```json 5 -样例输出 -Generated matrix: +``` + +**样例输出** ```json +Generated matrix: + 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 -``` + del the elements on the side: -```json 1 1 1 2 1 1 3 2 1 -``` The sum of the diagonal:5 +``` +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +using namespace std; +int main() +{ + while (1) + { + int a; + cin >> a; + int array[a][a]; + for (int i = 0; i < a; i++) + for (int j = 0; j < a; j++) + { + if (j < i) + array[i][j] = i + 1 - j; + else + array[i][j] = 1; + } + cout << "Generated matrix:" << endl; + for (int i = 0; i < a; i++) + { + for (int j = 0; j < a; j++) + { + cout << array[i][j]; + } + cout << endl; + } + cout << "del the elements on the side:" << endl; + for (int i = 1; i < a - 1; i++) + { + ________________; + cout << endl; + } + int sum = 0; + int i, j; + for (i = a - 2, j = 1; i >= 1; i--, j++) + { + sum += array[i][j]; + } + cout << "The sum of the diagonal:" << sum << endl; + } + return 0; +} +``` ## template @@ -96,7 +156,10 @@ int main() ## 答案 ```cpp - +for (int j = 1; j < a - 1; j++) +{ + cout << array[i][j]; +} ``` ## 选项 @@ -104,17 +167,26 @@ int main() ### A ```cpp - +for (int j = 1; j < a - 1; j++) +{ + cout << array[i - 1][j - 1]; +} ``` ### B ```cpp - +for (int j = 1; j < a - 1; j++) +{ + cout << array[i + 1][j + 1]; +} ``` ### C ```cpp - +for (int j = 0; j < a; j++) +{ + cout << array[i][j]; +} ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/8.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/8.exercises/solution.md" index 888e255ef29142f9a43928683e4f36f6870cc9c8..a9db8c2c84ddf684b271136ceb26a3cc7c0a4c79 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/8.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/8.exercises/solution.md" @@ -1,64 +1,133 @@ # 偶数 or 奇数 -偶数 or 奇数 -时间限制: 1 Sec 内存限制: 128 MB -题目描述 +**题目描述** + 编程班老师搞了一个有 N (1 <= N <= 100) 个正整数 I (1 <= I <= 10^60) 的表,叫 同学们去统计每个数里面数字(0,1,2,3,4,5,6,7,8,9)(注 0 为偶数)的奇偶数 字个数。写一个程序读入 N 个整数,统计每个整数的数字奇偶个数。 -输入 + +**输入** + 第 1 行: 一个单独的整数: N + 第 2 到第 N+1 行: 每行一个长长(小于等于 60 位)的整数,需要统计数字奇偶个数。 -输出 - 1..N 行: 第 j 行根据第 j 个整数输出奇数个数与偶数个数。 -样例输入 + +**输出** + +1..N 行: 第 j 行根据第 j 个整数输出奇数个数与偶数个数。 + +**样例输入** + +```json 2 1024 5931 -样例输出 +``` + +**样例输出** + +```json 1 3 4 0 +``` + +以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +#include +using namespace std; +string a[105]; +int b[105], c[105]; +int qiujishu(string x) +{ + int jishu = 0; + for (int i = 0; x.c_str()[i]; i++) + { + (1)____________; + } + return jishu; +} +int qiuoushu(string x) +{ + int oushu = 0; + for (int i = 0; x.c_str()[i]; i++) + { + (2)____________; + } + return oushu; +} +int main() +{ + int n; + cin >> n; + for (int i = 1; i <= n; i++) + { + cin >> a[i]; + b[i] = qiujishu(a[i]); + c[i] = qiuoushu(a[i]); + } + for (int i = 1; i <= n; i++) + { + cout << b[i] << " " << c[i] << endl; + } + return 0; +} +``` ## template ```cpp -#include -#include +#include +#include using namespace std; string a[105]; -int b[105],c[105]; -int qiujishu(string x){ - int jishu=0; - for(int i = 0; x.c_str()[i]; i++){ - if ((x.c_str()[i] - '0') % 2 == 1) jishu++; - } - return jishu; +int b[105], c[105]; +int qiujishu(string x) +{ + int jishu = 0; + for (int i = 0; x.c_str()[i]; i++) + { + if ((x.c_str()[i] - '0') % 2 == 1) + jishu++; + } + return jishu; } -int qiuoushu(string x){ - int oushu=0; - for(int i = 0; x.c_str()[i]; i++){ - if ((x.c_str()[i] - '0') % 2 == 0) oushu++; - } - return oushu; +int qiuoushu(string x) +{ + int oushu = 0; + for (int i = 0; x.c_str()[i]; i++) + { + if ((x.c_str()[i] - '0') % 2 == 0) + oushu++; + } + return oushu; } int main() { - int n; - cin>>n; - for(int i=1;i<=n;i++){ - cin>>a[i]; - b[i]=qiujishu(a[i]); - c[i]=qiuoushu(a[i]); - } - for(int i=1;i<=n;i++){ - cout<> n; + for (int i = 1; i <= n; i++) + { + cin >> a[i]; + b[i] = qiujishu(a[i]); + c[i] = qiuoushu(a[i]); + } + for (int i = 1; i <= n; i++) + { + cout << b[i] << " " << c[i] << endl; + } + return 0; } ``` ## 答案 ```cpp - +(1) +if ((x.c_str()[i] - '0') % 2 == 1) + jishu++; +(2) +if ((x.c_str()[i] - '0') % 2 == 0) + oushu++; ``` ## 选项 @@ -66,17 +135,32 @@ int main() ### A ```cpp - +(1) +if ((x.c_str()[i]) % 2 == 1) + jishu++; +(2) +if ((x.c_str()[i]) % 2 == 0) + oushu++; ``` ### B ```cpp - +(1) +if ((x.c_str()[i]) % 2 == 0) + jishu++; +(2) +if ((x.c_str()[i]) % 2 == 1) + oushu++; ``` ### C ```cpp - +(1) +if ((x.c_str()[i]) / 2 == 1) + jishu++; +(2) +if ((x.c_str()[i]) / 2 == 0) + oushu++; ``` \ No newline at end of file diff --git "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/9.exercises/solution.md" "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/9.exercises/solution.md" index 1c793212e30ad948565e0c6e8f4ad270565c3b60..b5c2cd3b1483cf88860c51845bda7c9fdf380982 100644 --- "a/data/2.dailycode\344\270\255\351\230\266/1.cpp/9.exercises/solution.md" +++ "b/data/2.dailycode\344\270\255\351\230\266/1.cpp/9.exercises/solution.md" @@ -19,6 +19,32 @@
 B 252
+以下程序实现了这一功能,请你填补空白处内容: + +```cpp +#include +using namespace std; +int main() { + double n, A, B; + cin >> n; + B = 12 * 0.7 * n; + if (n <= 10) { + A = 10 * n; + } + else if (n > 10 && n <= 20) { + A = 10 * 10 + (n - 10) * 8.2; + } + ___________________________; + if (A < B) { + cout << "A " << A; + } + else { + cout << "B " << B; + } + return 0; +} +``` + ## template ```cpp @@ -50,7 +76,9 @@ int main() { ## 答案 ```cpp - +else { + A = 10 * 8.2 + (n - 20) * 7.5 + 10 * 10; +} ``` ## 选项 @@ -58,17 +86,23 @@ int main() { ### A ```cpp - +else { + A = 20 * 7.5; +} ``` ### B ```cpp - +else { + A = (n - 10) * 8.2 + (n - 20) * 7.5 + 10 * 10; +} ``` ### C ```cpp - +else { + A = (n - 10) * 8.2 + (n - 20) * 7.5; +} ``` \ No newline at end of file