一些初中数学题
/*
一小球從100米高空自由落下,
每次落地后反彈為原高度的一半
第十次落地是,共經過多少米
第十次反彈多高
*/void test_37()
{double hight = 100;double lenth = 100;for (int i = 1; i <= 10; ++i){hight = hight / 2;//每次反彈為原高度的一半lenth += hight * 2;}printf("第十次落地共經過%f米,\n第十次反彈%f米\n", lenth, hight);
}
/* 有這樣一個六位數,它本身是一個整數的平方 其高三位和第三位也是一個整數的平方 例如225625=475^2,求滿足上述條件的所有六位數 */ void num_trans_char(int num, int *ch) {int j = 5;for (int i = 0; num != 0; ++i,--j){ch[j] = num % 10;num = num / 10;} } int ch_trans_num(int ch[]) {int num = 0;int len = sizeof(ch)/sizeof(ch[0]);for (int i = len - 1,j=0; i >= 0; --i,++j){num += ch[i] * pow((double)10, j);}return num; } void test_42() {//317^2 ~ 1000^2// 10^2 ~ 32~2int ch[6] = { 0 };int low = (int)sqrt((double)100000);int high = (int)sqrt((double)999999);int num = 0;int tmp1[3] = { 0 }, tmp2[3] = { 0 };for (++low; low < high; ++low){bool flag = true;double num1 = 0, num2 = 0;num = (int)pow((double)low, 2);//得到一個六位數 num_trans_char(num, ch);//轉換成數組int j = 0;for (int i = 0; i < 3; ++i,++j){tmp1[i] = ch[j];}//得到前三位的數組{for (int i = 2, j = 0; i >= 0; --i, ++j){num1 += tmp1[i] * pow((double)10, j);}}//轉換成數字num1 = sqrt((double)num1);for (int i = 1; i < 32; ++i)//判斷其是否能夠完全開平方{if (num1 != i)flag = false;else{flag = true;break;}}if (flag == false)continue;for (int i = 0; i < 3; ++i, ++j){tmp2[i] = ch[j];}//得到后三位的數組{for (int i = 2, j = 0; i >= 0; --i, ++j){num2 += tmp2[i] * pow((double)10, j);}}//轉換成數字num2 = sqrt((double)num2);for (int i = 1; i < 32; ++i)//判斷其是否能夠完全開平方{if (num2 != i)flag = false;else{flag = true;break;}}if (flag){printf("%d\n", num);}} }
/* 求等差數列 幼兒園老師給學生發糖果 又前往后的糖果數量成等差數列 前四個學生的糖果數目之和是26 之積是880 前前二十個等差數列 */ void test_43() {int candy[20] = { 0 };int first = 0, count = 0;int n1, n2, n3, n4;for (int i = 0; i < 26; ++i)//暴力遍歷{for (int j = 1; j < 20; ++j){n1 = i;n2 = n1 + j;n3 = n2 + j;n4 = n3 + j;if (((n1 + n2 + n3 + n4) == 26) && (n1*n2*n3*n4) == 880){first = i;count = j;}}}for (int i = 0; i < 20; ++i){printf("%d\t", first + (count*i));} }
/* 有這樣一個六位數,它本身是一個整數的平方 其高三位和第三位也是一個整數的平方 例如225625=475^2,求滿足上述條件的所有六位數 */ void num_trans_char(int num, int *ch) {int j = 5;for (int i = 0; num != 0; ++i,--j){ch[j] = num % 10;num = num / 10;} } int ch_trans_num(int ch[]) {int num = 0;int len = sizeof(ch)/sizeof(ch[0]);for (int i = len - 1,j=0; i >= 0; --i,++j){num += ch[i] * pow((double)10, j);}return num; } void test_42() {//317^2 ~ 1000^2// 10^2 ~ 32~2int ch[6] = { 0 };int low = (int)sqrt((double)100000);int high = (int)sqrt((double)999999);int num = 0;int tmp1[3] = { 0 }, tmp2[3] = { 0 };for (++low; low < high; ++low){bool flag = true;double num1 = 0, num2 = 0;num = (int)pow((double)low, 2);//得到一個六位數 num_trans_char(num, ch);//轉換成數組int j = 0;for (int i = 0; i < 3; ++i,++j){tmp1[i] = ch[j];}//得到前三位的數組{for (int i = 2, j = 0; i >= 0; --i, ++j){num1 += tmp1[i] * pow((double)10, j);}}//轉換成數字num1 = sqrt((double)num1);for (int i = 1; i < 32; ++i)//判斷其是否能夠完全開平方{if (num1 != i)flag = false;else{flag = true;break;}}if (flag == false)continue;for (int i = 0; i < 3; ++i, ++j){tmp2[i] = ch[j];}//得到后三位的數組{for (int i = 2, j = 0; i >= 0; --i, ++j){num2 += tmp2[i] * pow((double)10, j);}}//轉換成數字num2 = sqrt((double)num2);for (int i = 1; i < 32; ++i)//判斷其是否能夠完全開平方{if (num2 != i)flag = false;else{flag = true;break;}}if (flag){printf("%d\n", num);}} }
有更簡單的方法
/* 求等差數列 幼兒園老師給學生發糖果 又前往后的糖果數量成等差數列 前四個學生的糖果數目之和是26 之積是880 前前二十個等差數列 */ void test_43() {int candy[20] = { 0 };int first = 0, count = 0;int n1, n2, n3, n4;for (int i = 0; i < 26; ++i)//暴力遍歷{for (int j = 1; j < 20; ++j){n1 = i;n2 = n1 + j;n3 = n2 + j;n4 = n3 + j;if (((n1 + n2 + n3 + n4) == 26) && (n1*n2*n3*n4) == 880){first = i;count = j;}}}for (int i = 0; i < 20; ++i){printf("%d\t", first + (count*i));} }
總結
- 上一篇: 江西省计算机二级考试科目一模拟试题,20
- 下一篇: 2022年最新广东建筑安全员(安全员AB