如题:
判断 101-200 之间有多少个素数,并输出所有素数
判断素数的方法:用一个数分别去除 2 到 sqrt(这个数 ),如果能被整除, 则表明 此数不
是素数,反之是素数。
//思路分析:1.先找出有几个变量 发现101-200之间可以设为变量i 找出X的最大值 i<=200;
发现2- sqrt(这个数 )之间可以设为变量y 找出y的最大值 y<=i;
2.
//先找出有几个变量 发现101-200之间可以设为变量x 找出X的最大值 x<=200;
for( i = 101 ;i <=200; i ++)
{
//发现2- sqrt(这个数 )之间可以设为变量y 找出y的最大值 y<=i;
for(int j = 2 ; j <= i;j++)
{
//如果能被整除, 则表明 此数不是素数,反之是素数。
if( i % j ==0) break;
else{ printf("%d",i);
break;
}
}//结束内部循环
}//结束外部循环
如题
一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如 6=1+2+ 3 编程找
出 1000 以内的所有完数。
//思路分析:1.先找出几个几个变量 比较明显时的到1000以内的数,所以最大值为1000 i = 1;i<=1000;
2. 观察6=1+2+ 3 发现可以定义一个变量 j ,j的最小值时1开始 ,最大值时到i为止 所以j = 1; j<=i;
3.找出因子 发现 从1开始i为止如果真被整除的就是因子 得出 i % j == 0;j就是因子
4.通过观察 6=1+2+ 3 发现完数i是因子的累加和 需要定义一个sum;因为统计时的i的累加值所以就放在外层循环内 每次验证完重新计算
//先找出几个几个变量 比较明显时的到1000以内的数,所以最大值为1000 i = 1;i<=1000;
for(int i = 1 ; i <= 1000 ;i++)
{ int sum=0;
//发现可以定义一个变量 j ,j的最小值时1开始 ,最大值时到i为止 所以j = 1; j<=i;
for(int j = 1; j <= i ; i++)
{
//找出因子
if(i % j ==0 )
{
sum+=j;//为了找出完数
if(sum == i)
printf("%d",i);//打印完数
}
}//结束内层循环
}//结束外层循环
4、打印出杨辉三角形特征是,它的两条斜边都是由数字 1 组成的,而其余的数则是等于它肩上的两个数之和。
1.三角形的两边斜边上都是数字1,而其余额数都等于它肩上额两个数字相加
2.杨辉三角具有对称性(对称美,与首末两端“等距离”额两个数相等
3.每一行额第二个数就时是这行的行数
4.所有行的第二个数够成等差数列
5.第N行包含n+1个数
//思路分析 1.角形的两边斜边上都是数字1,而其余额数都等于它肩上额两个数字相加;所以要记录下第几行的下标 中有 10行10列
这里采用二级数组 int a[][] = new int[10][10];(这里我用的java写的我)
观察空个的关系 (这里我用#号表示)
########## 第一行 i = 0 , j =9;
######### 第二行 i = 1, j= 8;
######## 第三行 i = 2, j = 7;
####### 第四行 i = 3, j = 6;
###### 第五行 i = 4, j = 5 ;
##### 第六行i = 5 , j = 4
#### 第七行 i = 6 , j = 3;
## 第八行 i = 7 , j = 2;
# 第九行 i =8 , j = 1; //得出结论 j<=9-i;(这里是为了)让零填上
观察数字的形状可以(把数字看成*)
* 第一行 i = 0;j = 0;
** 第二行 i = 1;j = 1 ;
*** 第三行 i = 2;j = 2;
**** 第四行 i = 3;j = 3;
***** 第五行 i = 4;j = 4;
****** 第六行 i = 5;j = 5;
******* 第七行 i = 6;j = 6
******** 第八行 i = 7; j = 7;
********* 第九行 i =8 ; j=8;
********** 第十行 i =9 ; j=9;
观察得出j<=i;(这是三角型的)
for(int i = 0; i< 10 ; i++) //10行
{
//全部填上不管0为了不打印出来
for( int j = 0 ; j <= 9 - i; j++)
{
a[i][j] = 0;
}
for(int j = 0; j<= i; j++)
{
//三角形的两边斜边上都是数字1, 而其余额数都等于它肩上额两个数字相加(先解决两边为1的情况)
if(j == 0|| j == i)a[i][j] = 1;
//3.每一行额第二个数就时是这行的行数
else if(j == 1) a[i][j] = i;
//余额数都等于它肩上额两个数字相加
else a[i][j] = a[i-1][j-1]+a[i-1][j];
}//内部循环
}//外部循环
//打印图片
for(int i = 0; i <10; i++)
{
for(int j = 0 ; j<10; j++){
if(i==0&&j==0)//这是为了第一行的数字看起来协调的
System.out.print("\t ");
if(a[i][j]==0)//如果是0就不要打印出来打印空格补位为了美观
System.out.print(" ");
if(a[i][j]!=0)//不是0就打印出来
System.out.printf("%3d",a[i][j]); //把数字打印出来
if(i == j)//如果是打印的是最后一个就换行
System.out.print("\n");
}//结束内层循环
}//结束外层循环
5、编写函数,将一个字符串的全部有效元素逆。函数原型可声明为“void reverseStr( char * str ) ;”,参数 str 为指向字符串的指针。
//解题思路: 先要知道str的长度然后进行首尾交叉换 ,换次数为长度/2次;
void reverseStr( char * str ) ; //函数声明
int main()
{
return 0;
}
/*void reverseStr(char*str)//函数实现
{
char temp;
char*p = str; //用指针指向字符串的首地址
int count = 0;
for(int i = 0;*( p + i) != '\0' ; i++)
{
count++;//算出个数
}
p = NULL;// 指针指向空
for(int i = 0 ;i< count / 2;i++)
{
//进行首尾交叉交换次数为长度/2次;
temp = str[i];
str[i] = str[count-1-i];
str[count-1-i] = temp;
}
printf("%s",str);//输出结果
}
6、编写函数,将一个十进制数转换成一个二进制数(提示:将转换后的二进制数各位的值依次存储在一个一维数组中,要输出时,只要逆序输出这个数组各元素的值即可)。函数原型可声明为:“int transformToBin( int dnum, int bin[ ] ) ;”,参数 dnum 是要转换的十进制数,bin 是存储转换后的二进制值的数组(逆序存储的),返回值是 bin 数组中元素的个数。
int transformToBin(int dnum, int **bin);//函数声明(让我皮下我就要浪)
int transformToBin(int dnum, int **bin)//函数定义
{
int count = 0; //用于计算要分配空间的个数
int i = 0; //用来记录bin[]数组的下标
int temp ; //临时指针
temp=(int)malloc(sizeof(int));//分配空间
if(dnum 0)
{
(temp) /= 2;
count++;
}
// 分配空间大小
bin =(int)malloc(count);
//将二进制的结果传入数组
//将二进制的结果传入数组
while(dnum>0)
{
bin[i] =dnum%2;
dnum /= 2;
i++;
}
//打印看下有问题吗?
for(int j=0;j<count;j++)
{
printf("%d",bin[j]);
}
//逆序
for( int j = 0;j < count/2; j++)
{
(*temp)=bin[j];
bin[j] = bin[count-1-j];
bin[count-1-j] =(*temp);
}
printf("\n");
//输出逆序后结果
for( i = 0 ; i < count; i++)
{
printf("%d",bin[i]);
}
free(bin);//没用释放掉
free(temp);//没用释放掉
return count; //返会分配的个数数
//
// 思考问题如何表示 -号?
}
7、编写函数,将数组 s1 中的全部奇数都复制到数组 s2 中。函数原型可声明为:“int copyTo( int
* s1 , int n, int * s2 ) ; ”,参数 s1 和 s2 为指向两个数组的指针,n 为数组 s1 中元素的个数,
返回值为复制完成后 s2 中元素的个数。
int copyTo( int * s1 , int n, int ** s2 );//函数声明 继续浪(上面已经浪死了我还是要浪 主要是想节约空间啊)
int copyTo( int * s1 ,int n, int ** s2 ) //函数定义
{
int count=0;//奇数个数
//计算奇数个数
for(int i= 0;i<n;i++)
{
if(s1[i]%2!=0)
continue;
else count++;
}
s2 =(int)malloc(count);//分配空间
for(int i= 0,j = 0 ;i < n; i++) //j用于记录s2 的下标
{
if(s1[i] %2!=0)//找个奇数
{
s2[j] =s1[i];//把奇数逐个放入S2
j++;
}
}
//输出结果
for(int i = 0 ;i<count;i++)
{
printf("%d \t",s2[i]);
}
return count;//返回数字
}