定义并实现一个函数,它带有一个整型参数S,其功能是:把S的每个数字位上位奇数的数字依次取出,构成一个新的整数,高位仍在高位,低位仍在低位,所构成的新的整数是该函数的返回结果。例如,当S为987312时,函数返回结果是9731。若S中不存在奇数数字,返回0值。编写该函数时,不必考虑参数S及返回结果的正负号问题。
int f(int s)
{
int n=0;
int w=1;
while(s!=0)
{
int temp=s%10;
if(temp%2!=0)
{
n=n+w*temp;
w=w*10;
}
s=s/10;
}
return n;
}
杨辉三角形
void main()
{
int n;
scanf("%d",&n);
int a[maxsize][maxsize];
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
{
if(j==1)
a[i][j]=1;
else if(j==i)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
for(int i=1;i<=n;i++) //打印第n行
printf("%d ",a[n][i]);
}
(难,未掌握 )下图是由23个二进制数字组成的环,由3个二进制数字构成的23种不同的数字序列恰好在该环中分别出现一次,例如:从箭头位置开始按顺时针方向每三个连续的二进制数字构成的序列各不相同,它们所代表的十进制数依次是:0,1,2,5,3,7,6,4.编写一个完整程序,该程序对于输入的正整数n,生成由2n个二进制数字构成的环,使得从环中每个不同位置的数字开始按顺时针方向构成的长度为n的二进制数字序列各不相同。编程过程中,环的表达方式任意,程序输出结果是一个由2n个二进制数字构成的序列,用它表示求得的环,该序列可以从环中的任何一个位置上的数字开始,例如:对应下图的输出结果(n=3时的输出结果)可以是00010111,也可以是00101110,还可以是01011100,等等,程序输出任何一个即可。
bool isshowonce(int f[],int size,int n)
{//判断序列是否满足每个数字只出现一次的条件
int visit[maxsize]={0};
for(int i=0;i<size;i++)//有size个十进制数
{
int num=0;
for(int j=0;j<n;j++)//n为二进制构成一个十进制
{
num=num*2+f[(i+j)%size]; //滚动计算当前n位所表示的数字
}
if(visit[num]==1) //当前数字已出现过,返回false
{
return false;
}
else
{
visit[num]=1;//没访问过的标记访问
}
}
return true;
}
void fun(int n)//生成二进制数组
{
int size=pow(2,n);
int *f=(int *)malloc(sizeof(int)*size);//存放二进制数
memset(f,0,sizeof(int)*size);
while(1)
{
int j=0;
while(f[j]==1)
{
f[j++]=0;
}
f[j]=1;
if(isshowonce(f,size,n)==true)
{
for(int i=0;i<size;i++)
printf("%d ",f[i]);
return;
}
}
}
void main()
{
int n;
while(scanf("%d",&n)!=EOF)
fun(n);
}
(会做)
typedef struct node
{
int data;
struct node *next;
}*list;
list UnionSet(list Q,list P)
{
list R=(list)malloc(sizeof(node));
list r,q,p;
r=R;
q=Q->next;
while(q!=NULL)//将Q的所有结点并入R
{
r->next=q;
r=q;
q=q->next;
}
p=P->next;
while(p!=NULL)//从P中找出与Q不同的结点,并入R
{
q=Q->next;
int flag=0;
while(q!=NULL)
{
if(q->data==p->data)
{
flag=1;
break;
}
q=q->next;
}
if(flag==0)
{
r->next=p;
r=p;
}
p=p->next;
}
r->next=NULL;
return R;
}