嫒美直播免费版app下载-嫒美直播永久免费版下载-嫒美直播最新下载安装

當(dāng)前位置:首頁(yè) > 資格考試 > 正文

C++的這道簡(jiǎn)單題為什么是60分,求高手解哪里出錯(cuò)了

求C語(yǔ)言編程大佬幫忙!這道題的邏輯哪里出錯(cuò)了!找了幾個(gè)小時(shí)了沒(méi)搞明白!

代碼有點(diǎn)亂,不太看得清思路,里面有一些數(shù)組越界訪問(wèn)的情況,算法是否有效未知,重寫(xiě)了一個(gè)供參考。

思路如下:

這個(gè)問(wèn)題實(shí)際上是生成0~9的全排列,然后根據(jù)每個(gè)數(shù)在格子里的位置判斷每個(gè)排列是否符合要求。百度了一個(gè)全排列算法稍做修改,得到以下代碼,輸出的有效方案數(shù)是1580,在我這里輸出大約在70ms到100ms左右。百度這個(gè)代碼排版垃圾得無(wú)以復(fù)加,vs里面排得好好復(fù)制過(guò)來(lái)全亂,不再重排了。

另外,生成排列數(shù)以后,這個(gè)格子問(wèn)題其實(shí)應(yīng)該能轉(zhuǎn)化為純數(shù)學(xué)算法來(lái)判斷,不需要真的填什么表的,我懶得想太多,填表和判斷部分的代碼有點(diǎn)玩的性質(zhì)。

#include
//#include//測(cè)試執(zhí)行時(shí)間的GetTickCount()引用
//#include//測(cè)試執(zhí)行時(shí)間的GetTickCount()引用
constintROW=5;//增加兩行用于減少邊界判斷,實(shí)際使用中間3行
constintCOL=6;//增加兩列用于減少邊界判斷,實(shí)際使用中間4列
constintBORDER=-11;//表格邊界標(biāo)記
constintNON=-9;//標(biāo)記表格有效內(nèi)容的起止位置
intgrid[ROW][COL];//表格數(shù)組
intcount;//有效方案計(jì)數(shù)
voidInitGrid(void);//初始化表格,設(shè)置邊界和標(biāo)記表格有效內(nèi)容的起止位置
voidPrintGrid(void);//打印輸出有效方案
voidPerm(intlist[],intk,intm);//遞歸生成排列數(shù),生成的排列數(shù)輸出到表格中,然后判斷是否打印和計(jì)數(shù)
voidSwap(int&a,int&b);//引用、交換函數(shù),用于遞歸生成排列數(shù)函數(shù)
voidPermOutput(intlist[]);//排列數(shù)填表、判斷、打印、計(jì)數(shù)
voidmain(void)
{
//longstart_time,end_time;//記錄測(cè)試執(zhí)行時(shí)間起止的變量
intnum[10]={0,1,2,3,4,5,6,7,8,9};//0~9數(shù)值序列
//start_time=GetTickCount();//獲取此程序段開(kāi)始執(zhí)行時(shí)間

count=0;
InitGrid();
Perm(num,0,10);
//end_time=GetTickCount();//獲取此程序段執(zhí)行結(jié)束時(shí)間
//printf("\nCount=%din%ldms\n",count,end_time-start_time);//打印輸出程序執(zhí)行時(shí)間
getchar();
}
//初始化表格,設(shè)置邊界和標(biāo)記表格有效內(nèi)容的起止位置
voidInitGrid(void)
{
inti,j;

for(i=0;i{
for(j=0;j{
grid[i][j]=BORDER;//設(shè)置邊界
}
}
//設(shè)置有效內(nèi)容的起止位置
grid[1][1]=NON;
grid[ROW-2][COL-2]=NON;
}
//打印輸出有效方案
voidPrintGrid(void)
{
inti,j;

printf("-----------\n");
for(i=1;i{
for(j=1;j{
if(grid[i][j]!=NON)
printf("%5d",grid[i][j]);//有效值
else
printf("%5s","");//有效值起止位置
}
printf("\n");
}
}
//遞歸生成排列數(shù),生成的排列數(shù)輸出到表格中,然后判斷是否打印和計(jì)數(shù)
voidPerm(intlist[],intk,intm)//k表示前綴的位置,m是要排列的數(shù)目。
{
inti;
if(k==m-1)//前綴是最后一個(gè)位置,表示m位排列數(shù)已生成,判斷是否有效方案并打印和記數(shù)。
{
PermOutput(list);
}
else//否則進(jìn)入遞歸生成一下個(gè)排列數(shù)位
{
for(i=k;i{
//交換前綴,使之產(chǎn)生下一個(gè)前綴.
Swap(list[k],list[i]);
Perm(list,k+1,m);
//將前綴換回來(lái),繼續(xù)做上一個(gè)的前綴排列.
Swap(list[k],list[i]);
}
}
}
//引用、交換函數(shù),用于遞歸生成排列數(shù)函數(shù)
voidSwap(int&a,int&b)
{
inttemp=a;a=b;b=temp;
}
//排列數(shù)填表、判斷、打印、計(jì)數(shù)
voidPermOutput(intlist[])
{
inti,j,n;//n用于引用grid[i][j]的值提高效率
boolok;//方案有效標(biāo)記
//將排列數(shù)填入表格中
n=0;
for(i=1;i{
for(j=1;j{
if(grid[i][j]!=NON)
{
grid[i][j]=list[n];
n++;
}
}
}
//判斷表格中是否有相鄰的數(shù)字
ok=true;
for(i=1;i{
for(j=1;j{
n=grid[i][j];
if((grid[i-1][j-1]==n-1)||((grid[i-1][j-1]==n+1))||//左上
(grid[i-1][j+1]==n-1)||((grid[i-1][j+1]==n+1))||//右上
(grid[i-1][j]==n-1)||((grid[i-1][j]==n+1))||//上
(grid[i][j-1]==n-1)||((grid[i][j-1]==n+1))||//左
(grid[i][j+1]==n-1)||((grid[i][j+1]==n+1))||//右
(grid[i+1][j]==n-1)||((grid[i+1][j]==n+1))||//下
(grid[i+1][j-1]==n-1)||((grid[i+1][j-1]==n+1))||//左下
(grid[i+1][j+1]==n-1)||((grid[i+1][j+1]==n+1))//右下
)
{
ok=false;//發(fā)現(xiàn)任一相鄰數(shù)則設(shè)置失敗標(biāo)記,跳出該輪循環(huán)
break;
}
}
if(!ok)//如標(biāo)記為失敗,跳出外層循環(huán)
break;
}
//如標(biāo)記為成功,方案有效,打印輸出
if(ok)
{
//PrintGrid();//打印輸出有效方案
count++;
}
}

c語(yǔ)言題目,這個(gè)題怎么算答案都算不對(duì),不知道哪里錯(cuò)了,漏了,不知道有沒(méi)有人能解出來(lái)的

填3.6。 只要知道'/'是整除符號(hào),符號(hào)前后都是整數(shù)結(jié)果只保留整數(shù),否則就是浮點(diǎn)數(shù)。 所以這里2/3是0,m/2是2。(小數(shù)部分都被忽略了)。 所以s想等于8,原式子就變成:8=0+2*y/1.2+2。解個(gè)方程就知道y應(yīng)該是3.6。

我剛學(xué)C語(yǔ)言,這是一個(gè)C語(yǔ)言的簡(jiǎn)單編程問(wèn)題,請(qǐng)問(wèn)哪里出現(xiàn)錯(cuò)誤了?

輸入不要加逗號(hào),就好了。 scanf("%d %f", &NUMBERS, &PRICE);

求大佬解決這到C語(yǔ)言題,指出哪里有錯(cuò)誤,幫我寫(xiě)一下正確的程序,萬(wàn)分感謝QAQ

#include
#defineMAXN10
voidf(longintx,char*p);
intmain()
{longintx;
chars[MAXN]="";
scanf("%ld",&x);
f(x,s);printf("%s\n",s);
return0;
}
voidf(longx,char*s)
{
inti=0,j=0,c;
if(x<0){s[0]='-';x=-x;i=j=1;}
do{
s[i]=x%16;
s[i]+=s[i]<10?48:55;
i++;
x/=16;
}while(x>0);
s[i]='\0';
for(i--;j{c=s[j];s[j]=s[i];s[i]=c;}
}

求問(wèn)這道C語(yǔ)言編程題我哪兒出錯(cuò)了

看清楚題目要求,是加9,不是加10!
展開(kāi)全文閱讀