个人学习编程(3-12) 刷题
杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1主要是发现规律:一、a[i][j]对角线全都是1,并且第[1]列且j=0都是1
二、某个数等于它的上一行和上一行的左一位 即 a[i][j] = a[i-1][j] + a[i-1][j-1]
#include <stdio.h>
int main() {
int i,j;
int a[10][10] = {};
for (int i = 0; i < 10; i++){
for (j = 0; j <= i; j++){
if (i==j || j == 0){
a[i][j] = 1;
}
}
}
for ( i = 2; i < 10; i++){
for ( j = 0; j < i; j++){
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
}
}
for ( i = 0; i < 10; i++){
for ( j = 0; j<=i; j++){
printf("%-4d",a[i][j]);
}
printf("\n");
}
return 0;
}
约瑟夫环:
按照123报数,来淘汰3
#include <stdio.h>
int main(){
int table[100] = {1,1,1,1,1};
for (int i = 1; i <= 8; i++)
{
table[i] = 1;
}
for (int i = 1; i <= 8; i++)
{
printf("%-4d",table[i]);
}
printf("\n");
int index;
int baoShu;
int count = 8;
//第1个人
index = 0;
baoShu = 0;
while (count > 0) //说明人数大于零,一直执行
{
index++;
baoShu++;
while (table[index] == 0){
index++;
if (index > 8){
index = 1;
}
}
if (baoShu == 3){
table[index] = 0;
printf("%-4d",index);
count--;
baoShu = 0;
}
}
return 0;
}
三种方法字符串长度
// 方法1:数组下标遍历法
// 方法2:指针差值法
// 直接指针遍历法
#include <stdio.h>
// 方法1:数组下标遍历法
int lenofString(char a[]) {
int i = 0;
while(a[i] != '\0') { // 遍历直到遇到空字符[2,7](@ref)
i++;
}
return i;
}
// 方法2:指针差值法
int lenofString2(char *p) {
char *start = p; // 记录起始地址[3,9](@ref)
while(*p != '\0') { // 指针遍历字符串
p++;
}
return p - start; // 指针差值即长度[3,9](@ref)
}
int main() {
char a[] = "iamateacher"; // 字符数组初始化
char *p = "iamateachertoo"; // 字符串字面量
printf("a = %s\n", a);
printf("p = %s\n", p);
// 直接指针遍历法
char *p_a = a;
int count = 0;
while (*p_a != '\0') { // 手动遍历计算长度[2,6](@ref)
count++;
p_a++;
}
printf("直接遍历 count = %d\n", count);
// 调用两种函数方法
printf("数组 method: %d\n", lenofString(a));
printf("指针 method: %d\n", lenofString2(p));
return 0;
}