#include
#include
#include
#include
char s[8];
int g(int x)
{
if(x<0)return(x+3);
else if(x>=3)return(x-3);
else return(x);
}
int f(int x[3],int y[3],int z[3])
{
int i,a=0;
for(i=0;i<3;i++)a=a+x[g(i)]*y[g(i+1)]*z[g(i+2)]-x[g(i)]*y[g(i-1)]*z[g(i-2)];
return(a);
}
void h(float a,int l)
{
int b[10],i,j,c,e;
float d;
if(a==0)
{
s[0]='0';
s[1]='\0';
return;
}
if(a<0)
{
s[0]='-';
a=-a;
}
else if(l)s[0]='+';
c=(int)a;
d=a-c;
if(c==0)
for(i=0;c;i++)
{
b[i]=c%10;
c=(c-b[i])/10;
}
for(j=0;j if(d)
while(d&&(i+l)<7)
{
e=(int)(d*10);
d=d*10-e;
s[i+l]=e+48;
i++;
}
s[i+l]='\0';
}
int main()
{
int a[3],b[3],c[3],d[3],e,ex,ey,ez;
float x,y,z;
int i;
char ch[150];
FILE*fp;
srand((int)time(0));
for(i=0;i<3;i++)
{
a[i]=rand()-16338;
b[i]=rand()-16338;
c[i]=rand()-16338;
d[i]=rand()-16338;
if(i==2)if(a[1]*b[2]==b[1]*a[2]&&b[1]*c[2]==c[1]*b[2])i=1;
}
printf("平面形式为Ax+By+Cz=D,A、B、C、D的值分别为%d、%d、%d、%d\n",a[0],b[0],c[0],d[0]);
printf("直线的形式为A1x+B1y+C1z=D1,A2x+B2y+C2z=D2,A1、B1、C1、D1、A2、B2、C2、D2的值分别为%d、%d、%d、%d、%d、%d、%d、%d\n",a[1],b[1],c[1],d[1],a[2],b[2],c[2],d[2]);
if((fp=fopen("d:\\直线与平面的交点.txt","w"))==NULL)
{
printf("文件打开失败");
getch();
return 0;
}
strcpy(ch,"平面:");
h((float)a[0],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[0],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[0],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[0],0);
strcat(ch,s);
strcat(ch,"\n直线:");
h((float)a[1],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[1],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[1],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[1],0);
strcat(ch,s);
strcat(ch,",");
h((float)a[2],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[2],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[2],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[2],0);
strcat(ch,s);
e=f(a,b,c);
ex=f(d,b,c);
ey=f(a,d,c);
ez=f(a,b,d);
if(e==0)
{
if(ex==0)strcat(ch,"\n直线在平面内");
else strcat(ch,"\n直线与平面平行");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
return 0;
}
x=(float)ex/e;
y=(float)ey/e;
z=(float)ez/e;
strcat(ch,"\n直线和平面的交点为(");
h(x,0);
strcat(ch,s);
strcat(ch,",");
h(y,0);
strcat(ch,s);
strcat(ch,",");
h(z,0);
strcat(ch,s);
strcat(ch,")");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
getch();
return 0;
}
#include
#include
#include
#include
char s[8];
int g(int x)
{
if(x<0)return(x+3);
else if(x>=3)return(x-3);
else return(x);
}
int f(int x[3],int y[3],int z[3])
{
int i,a=0;
for(i=0;i<3;i++)a=a+x[g(i)]*y[g(i+1)]*z[g(i+2)]-x[g(i)]*y[g(i-1)]*z[g(i-2)];
return(a);
}
void h(float a,int l)
{
int b[10],i,j,c,e;
float d;
if(a==0)
{
s[0]='0';
s[1]='\0';
return;
}
if(a<0)
{
s[0]='-';
a=-a;
}
else if(l)s[0]='+';
c=(int)a;
d=a-c;
if(c==0)
for(i=0;c;i++)
{
b[i]=c%10;
c=(c-b[i])/10;
}
for(j=0;j if(d)
while(d&&(i+l)<7)
{
e=(int)(d*10);
d=d*10-e;
s[i+l]=e+48;
i++;
}
s[i+l]='\0';
}
int main()
{
int a[3],b[3],c[3],d[3],e,ex,ey,ez;
float x,y,z;
int i;
char ch[150];
FILE*fp;
srand((int)time(0));
for(i=0;i<3;i++)
{
a[i]=rand()-16338;
b[i]=rand()-16338;
c[i]=rand()-16338;
d[i]=rand()-16338;
if(i==2)if(a[1]*b[2]==b[1]*a[2]&&b[1]*c[2]==c[1]*b[2])i=1;
}
printf("平面形式为Ax+By+Cz=D,A、B、C、D的值分别为%d、%d、%d、%d\n",a[0],b[0],c[0],d[0]);
printf("直线的形式为A1x+B1y+C1z=D1,A2x+B2y+C2z=D2,A1、B1、C1、D1、A2、B2、C2、D2的值分别为%d、%d、%d、%d、%d、%d、%d、%d\n",a[1],b[1],c[1],d[1],a[2],b[2],c[2],d[2]);
if((fp=fopen("d:\\直线与平面的交点.txt","w"))==NULL)
{
printf("文件打开失败");
getch();
return 0;
}
strcpy(ch,"平面:");
h((float)a[0],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[0],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[0],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[0],0);
strcat(ch,s);
strcat(ch,"\n直线:");
h((float)a[1],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[1],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[1],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[1],0);
strcat(ch,s);
strcat(ch,",");
h((float)a[2],0);
strcat(ch,s);
strcat(ch,"x");
h((float)b[2],1);
strcat(ch,s);
strcat(ch,"y");
h((float)c[2],1);
strcat(ch,s);
strcat(ch,"z=");
h((float)d[2],0);
strcat(ch,s);
e=f(a,b,c);
ex=f(d,b,c);
ey=f(a,d,c);
ez=f(a,b,d);
if(e==0)
{
if(ex==0)strcat(ch,"\n直线在平面内");
else strcat(ch,"\n直线与平面平行");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
return 0;
}
x=(float)ex/e;
y=(float)ey/e;
z=(float)ez/e;
strcat(ch,"\n直线和平面的交点为(");
h(x,0);
strcat(ch,s);
strcat(ch,",");
h(y,0);
strcat(ch,s);
strcat(ch,",");
h(z,0);
strcat(ch,s);
strcat(ch,")");
for(i=0;ch[i];i++)fputc(ch[i],fp);
fclose(fp);
getch();
return 0;
}
另外,团IDC网上有许多产品团购,便宜有口碑
#include
using namespace std;
template
template
class Node
{
friend class LinkList
private:
datatype data;//计猴子号
Node
};
template
class LinkList
{
public:
LinkList();
void monkey(int m); //建立有m个元素的单链表
datatype Get(int a); //取单链表中第i个结点的元素值
datatype Delete(int n); //在单链表中删除第n个结点
private:
Node
};
template
LinkList
{head=new Node
template
void LinkList
{
int i;//整型变量i,用于计数
Node
p=new Node
p->data=1; //初始化p结点data域为1
p->next=NULL;//初始化p结点next域为空
head=p;//链表头指针head赋值为p
q=p; //q赋值为p
for (i=2; i<=m; i++) //用循环结构构造链表
{
p=new Node
p->data=i; //初始化p结点data域为i,表示猴子号
q->next=p; //将p点加到链表尾部
q=p; //让指向链表尾部结点
p->next=NULL; //链表尾部为空
}
tail=q;//链表尾
tail->next=head;//链表尾部指向链表头,形成循环链表
}
template
datatype LinkList
{
Node
int j=0;
q=tail; //指向循环链表尾部
cout<<"被删除的猴子号码依次为:"<
{
p=q->next;//p赋值给下一个相邻结点
j++;
if(j%n==0)
{
cout<
delete p;//释放空间
p=NULL;
}
else q=p;//q指向相邻的下一个结点p
}
cout<
return head->data;
}
template
datatype LinkList
{
Node
int j;//计数器
p=head->next; j=1; //或p=head; j=0;
while (p && j {
p=p->next; //工作指针p后移
j++;
}
if (!p) throw "a值不合法";
else return p->data;
}
void main()
{
int m,n;
LinkList
cout<<"请输入猴子的总数:"<
cout<<"请输入要删除猴子的所报的数:"<
mon.monkey(m);
mon.Delete(n);
cout<<"猴王是:"<
这其实就是约瑟夫问题....你可以去google下,有很多种解法的...
不用那么麻烦,数学方法:
#include
using namespace std;
int main()
{
int n, m, i, s = 0;
cout << "N M = " ;
cin >> n >> m;
for (i = 2; i < n; ++i)
s = (s + m)%i;
cout << "The winner is " << s + 1 << endl;
return 0;
}
想要用链表解法,也可以,追问就好