//1, 九九乘法表
for (int i =0; i <9; i++) {
for (int j =0; j < i +1; j++) {
printf("%d * %d = %-3d",i +1,j +1,(j +1) * (i +1));
}
printf("\n");
}
//2, 100以内的素数
for (int i =2; i <101; i++) {
for (int j =2; j < i; j++) {
if (i % j ==0) {
break;
}
if (j +1 == i) {
printf("%d\n",i);
}
}
}
//3, 输入两个数,求最小公倍数和最大公约数
方法一:
int m =0,n =0;
scanf("%d,%d",&m,&n);
int max = m > n ? m : n;
int min = m < n ? m : n;
if ((max % min) ==0) {
printf("%d\n",min);
}else{
for (int i =1; i < min /2; i++) {
if ((min % i ==0) && (max % i ==0)) {
printf("%d\n",i);
}
}
}
方法二:辗转相除法求最大公约数
int m =0,n =0,a =0,b =0;
scanf("%d,%d",&a,&b);
m = a;
n = b;
while (n !=0) {
int c = m % n;
m = n;
n = c;
}
printf("%d\n",m);
printf("%d\n",a * b / m);
//4、打印一个 各个位立方之和等于该整数的三位数(水仙花数)
方法一:
int result =0;
for (int i =100; i <1000; i++) {
int unit = i %10;
int decade = i /10 %10;
int hundreds = i /100;
result = hundreds * hundreds * hundreds + decade * decade * decade + unit * unit * unit;
if (i == result) {
printf("%d\n",result);
}
}
方法二:
for (int i =1; i <10; i++) {
for (int j =0; j <10; j++) {
for (int k =0; k <10; k++) {
if (i*i*i + j*j*j + k*k*k == i *100 + j *10 + k) {
printf("%d\n", i *100 + j *10 + k);
}
}
}
}
//5、使用循环打印三角形
//输出以下图形
// *
// ***
//*****
// ***
// *
//算法一:
int n;// n是*最多的那一行的行数
printf("Enter n:");
scanf("%d",&n);
for (int i = n -1; i > 0; i--) {
for (int j =0; j < i; j++) {
printf(" ");
}
for (int j =0; j < n * 2 -2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
for (int i =0; i < n ; i++) {
for (int j =0; j < i; j++) {
printf(" ");
}
for (int j =0; j < n * 2 -2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
//算法二:
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
for(i=n-1;i>=1;i--)
{
for(j=1;j<=n-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
//输出以下图形
// *
// * *
// * * *
//* * * *
// * * *
// * *
// *
int n = 0;
scanf("%d",&n);
for (int i =0; i < n - 1; i++) {
for (int j =0; j < n - i - 1; j++) {
printf(" ");
}
for (int j =0; j < 2 * i +1; j++) {
if ((j + 1) %2 == 0) {
printf(" ");
}else{
printf("*");
}
}
printf("\n");
}
for (int i =0; i < n; i++) {
for (int j =0; j < i; j++) {
printf(" ");
}
for (int j =0; j < n * 2 - i *2 - 1; j++) {
if ((j + 1) %2 == 0) {
printf(" ");
}else{
printf("*");
}
}
printf("\n");
}
//7、求S(n) = a+aa+aaa+aaaa+...+aa..a之值
int a =0,n =0,sn =0,an =0;
printf("请输入a,n值:");
scanf("%d,%d",&a,&n);
for (int i =0; i < n; i++) {
an = an *10 + a;
sn += an;
if (i < n -1) {
printf("%d + ",an);
}else{
printf("%d = ",an);
}
}
printf("%d\n",sn);
//8、求1!+2!+3!+4!+..+20!
方法一:二层循环
int num =0;
long sum =0,temp =1;
scanf("%d",&num);
for (int i =1; i < num +1; i++) {
for (int j =1; j < i +1; j++) {
temp *= j;
}
sum += temp;
temp =1;
}
printf("%ld\n",sum);
方法二:一层循环
long sum =0,an =1;
for (int i =1; i <21; i++) {
an *= i;
sum += an;
}
printf("%ld\n",sum);
//9、一个球从100m高度*落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高?
方法一:
float height = 100,aheight = height / 2;
for (int i =0; i <9; i++) {
height += aheight *2;
aheight = aheight /2;
}
printf("第10次落地时经过的总长度是%f/n",height);
printf("第10次弹起的高度是%f/n",aheight);
方法二:
float height =100,sum =0;
for (int i =0; i <10; i++) {
sum += height *2;
height /=2;
}
sum = sum -100;
printf("%f",sum);
//10、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第一天共摘多少个桃子
int num =1;
for (int i =0; i <9 +1; i++) {
printf("第%d天有%3d个桃子\n",10 - i,num);
num = (num +1) *2;
}
//11. 找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息。
const int row = 3; //定义行数
const int rol = 4; //定义列数
//定义一个二维数组,行数列数已定义
int nArray[row][rol] = {{5,5,5,5},{1,9,9,9},{1,9,9,9}};
//nMinIndexI用来存放每一列最小值的下标,nMaxIndexJ用来存放每行最大值的下标
int nMinIndexI = 0,nMaxIndexJ = 0;
int k = 0;
for (int i = 0; i < row; i++) { //找出每行最大元素,并记录其下标
for (int j = 0; j < rol; j++) {
if (nArray[i][j] > nArray[i][j + 1]) {
nMinIndexI = i;
nMaxIndexJ = j;
}
}
for (int j = 0; j < rol; j++) { //查找同一行是否有和最大值相等的元素
if (nArray[i][j] == nArray[nMinIndexI][nMaxIndexJ]) {
for (k = 0; k < row; k++) {
//最大值元素与其所在列对比,若遇到比它小的元素,就跳出循环
if (nArray[k][j] < nArray[i][j]) {
break;
}
}
//若循环正常结束(未执行break语句),则这个元素就是鞍点
if (k == row) {
printf("鞍点:nArray[%d][%d] = %d\n",i,j,nArray[i][j]);
}
}
}
}