卡拉兹猜想
实现C代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int callatz(int x){
int count = 0;
while (x != 1) {
if (x % 2 == 0) {
x = x / 2;
}
else {
x = (3 * x + 1) /2;
}
count += 1;
}
return count;
}
int main() {
int x,flag;
scanf("%d", &x);
flag = callatz(x);
printf("%d", flag);
}
#define _CRT_SECURE_NO_WARNINGS
使用visual studio2019编译运行,scanf函数会要求改为scanf_s函数,在程序中宏定义如上代码即可使用scanf。
实现代码如下:
#define LEN(x) sizeof(x)/sizeof(x[0])
#include<stdio.h>
int max(int school[],int* flag,int len) {
int scr = 0;
for (int i = 1; i <=len; i++) {
if (school[i - 1] > scr) {
scr = school[i - 1];
*flag = i;
}
}
return scr;
}
int main() {
int n,tem,scr,fin,len,d=0;
int* flag=&d;
scanf("%d",&n);
int school[20] = {0};
for (int i = 1; i <= n; i++) {
scanf("%d%d", &tem, &scr);
school[tem - 1] += scr;
}
len = LEN(school);
fin=max(school, flag,len);
printf("%d %d", *flag, fin);
}
尽量在往代码多调用子函数方向上靠。
- 在调用子函数时,若要返回多个值,则可以使用指针的方式进行传递,(或者数组,本质上并无差别)。
- 初始化指针的时候若直接赋值为0则为空指针,调用时会出现访问权限的问题。
- 数组定义时不能直接使用变量进行长度定义。
- 使用sizeof(x)/sizeof(x[0])这个方法进行数组长度计算时不能在子函数中使用,因为传进去的数组是地址,使用地址的sizeof显然没道理。
实现c代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int row,col;
char c;
scanf("%d%c", &col, &c);
if (col / 2 == 0) {
row = col / 2;
}
else {
row = col / 2 + 1;
}
for (int i = 1; i <= row; i++) {
printf("%c", c);
if (i == 1 || i == row) {
for (int j = 2; j <= col; j++) {
printf("%c", c);
}
printf("\n");
}
else {
for (int j = 2; j <= col-1; j++) {
printf(" ");
}
printf("%c", c);
printf("\n");
}
}
}
分析完问题后并不太难。