塗色編程題
『壹』 塗色的問題
你的第一種做法正確為4410種,按你的第一種方法就可以得第二三圖為21840種,109410種。
main()
{
int color[]={1,2,3,4};
int blank[8][8];
int i,j,count=0;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
blank[i][j]=0;
}
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(i==0)
{blank[i][j]=color[count%4];count++;}
else
{
if(blank[i-1][j]!=color[count%4])
{blank[i][j]=color[count%4];count++;}
else
{blank[i][j]=color[(count+1)%4];count++;}
}//else
}//inner for
}//outter for
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{printf(blank[i][j]);}//inner for
printf('\n');
}//outter for
}//main
以上程序,是用java寫的,在jdk中調試通過,
運行結果正確。
改成c程序後,調試通過,但運行結果不對,可能是我得
tc有問題,你用你的c環境運行看看。
『叄』 編程求一筆畫五角星問題
1、如圖的五角星。從A點出發,不重復任何路徑,也不漏去任何路徑,走完一同回
到A(即一筆畫)。試編程列印出所有可行方案。
2、如圖所示的一個七巧板,現利用四種不同的顏色對每一塊進行塗色,
要求相鄰
區域的顏色不能相同。試編程找出所有可能的塗色方案。
3、以下列方式向5×5矩陣中填入數字。若該數字i(1≤i≤25)已被置於坐標位
置(x,y),則數字i+1的坐標位置應為(z,w)。(z,w)可按下列關系由(x,
y)算出:
┌┬┬┬┬┐
(1):(z,w)=(x±3,y)
├┼┼┼┼┤
(2):(z,w)=(x,y±3)
├┼┼┼┼┤
(3):(z,w)=(x±2,y±2)
├┼┼┼┼┤
求解問題如下:
├┼┼┼┼┤
└┴┴┴┴┘
(1)編寫一個程序,當數字1被指定於某個位置時,列舉出其它24個數字應放
在的位置,列舉出該條件下所有可能方案,輸出方式如圖所示。
(2)使數字1的起始位置坐標分別處於矩陣的含主對線的右上三角的每一個位
置,計算出每一種情況下所有可能的方案?
舉例:如數字1的起始位置坐標被定為(2,2)則數字2的可能位置坐標應為
(2,5),(5,2)或(4,4)上述位置在圖中用「*」號表示。
『肆』 關於Java編程計算n個小球排成一線塗色的問題
最後答案是多少呢?需不需要輸出每一種塗色的具體方案。
如果只輸出方案數的話那麼:
根據乘法原則
第一個球塗色有3種方案,最後一個球有2種方案,中間每個球從第二個都有2種方案所以最終方案數即:
3*2*2^(n-2) = 3*2^(n-1)
『伍』 C語言 編程題目 程序設計題目 高中信息科技競賽編程題目 【100分】
【第一道】
#include <iostream>
using namespace std;
#define pi 3.14159265
double maxvolume(double a,double b)
{
double v1,v2,r;
r=b/(2*pi+2);
v1=pi*r*r*a;
r=a/(2*pi+2);
v2=pi*r*r*b;
if(v1>v2)
return v1;
else
return v2;
}
int main()
{
double a,b;
cout<<"請輸入矩形的長寬:";
cin>>a;
cin>>b;
cout<<"最大圓柱體積:"<<maxvolume(a,b)<<endl;
return 0;
}
【第二道】
//事實上,塗色方案不止樣例上的一種,我把所有的可行方案都輸出了一下
#include <iostream>
using namespace std;
int data[][8]={ {0},
{0,0,1,0,0,0,1,1},
{0,1,0,1,1,1,1,0},
{0,0,1,0,1,0,0,0},
{0,0,1,1,0,1,0,0},
{0,0,1,0,1,0,1,0},
{0,1,1,0,0,1,0,1},
{0,1,0,0,0,0,1,0}
};
int total;
int color[8];
char COLOR[5]={' ','R','Y','B','W'};
void output()
{
total++;
cout<<"["<<total<<"]\t";
for(int i=1;i<=7;i++)
{
cout.width(2);
cout<<COLOR[color[i]];
}
cout<<endl;
}
bool checkcolor(int s)
{
for(int i=1;i<=7;i++)
{
if(data[i][s]==1&&color[i]==color[s])
return false;
}
return true;
}
void drawcolor(int s)
{
if(s>7)
output();
else
for(int i=1;i<=4;i++)
{
color[s]=i;
if(checkcolor(s))
drawcolor(s+1);
}
}
int main()
{
cout<<" \t";
for(int i=1;i<=7;i++)
{
cout.width(2);
cout<<i;
}
cout<<endl;
drawcolor(1);
cout<<endl<<" \t塗色方案總數:"<<total<<endl<<endl;
return 0;
}
『陸』 做數控加工的學徒,圖紙中的20°度角度的長怎麼計算出來錐度部分的長是多少謝謝!
計算公式: 大徑-小徑/長度=錐度比,可以用三角函數。
錐度塞規主要用於檢驗產品的大徑、錐度和接觸率,屬於專用綜合檢具。錐度塞規可分為尺寸塞規和塗色塞規兩種。由於塗色錐度塞規的設計和檢測都比較簡單,故在工件測量中得到普遍使用。
『柒』 九宮格填數字有什麼技巧!
1
一、憑借眼力查看那個九宮格數字多且相鄰數字多
二、數字排除法(如上圖)左下九宮格缺數字:1、4、5、7,橫向縱向排除,只能9上面一格填1
『捌』 本人17了。 不想讀書了。對電腦很感興趣,不過以前只是玩游戲,基本的都懂。現在想學電腦。不知道從何起步
有的技術非常賺錢,學什麼事都要下功夫,你有沒有這樣的毅力與恆心?
你可以學技術高級點,比如學造船套圖,或學裝配,管道,這一類,我在船廠
工作,我是套圖主要是CAD,一月7000多元!學了四個月吧,跟別人混了幾個
月,現在自己能獨立工作了!
還有就是學編程IT,不過要學的深才有大的發展。
你也可以學機械,模具,數控,汽修,.銷售,方案,會計這一類有精的話,一月可達3000-4000元,
如果你覺的這些比較累,臟,那麼建議你學廣告設計,這個很簡單,但要在於
自己下努力,要經常練習,做題目!
平面設計我也學過,主要是PS,大街上廣告,影樓圖片製作之類,這個的話跟別人學個半年,那麼自
己就可以開店了,好的話,一年賺個10萬不成問題。
還有就是建築。裝潢電腦設計之類!
祝你好運,所謂行行出狀元,只要學的精!!
『玖』 畫點函數
WINDOWS圖像編程
--------------------------------------------------------------------------------
圖形設備介面(GDI,Graphics Device Interface)的主要目標之一是支持在輸出設備(如視頻顯示器、列印機和繪圖儀)上的與設備無關的圖形。 GDI通過將應用程序與不同輸出設備特性相隔離,使Windows應用程序能夠毫無問題地在Windows支持的任何圖形輸出設備上運行。
Windows中的圖形基本上是由從GDI.EXE模塊中輸出的函數處理的(盡管一些繪制函數實際上具有USER.EXE的入口點),GDI.EXE模塊調用在不同驅動程序文件中的常式,其中有一個.DRV驅動程序文件用於控制顯示屏幕,並且可能有一個或多個其他的.DRV驅動程序文件用來控制列印機或繪圖儀。
Windows GDI使用兩種坐標系統。使用虛擬坐標系統可以使程序不依賴於具體的硬體,使用設備坐標系統可以使程序和硬體緊密相聯。
GDI含有在Windows應用程序內部執行、且與設備無關的圖形操作函數,這些函數可產生各種各樣的線、正文和點陣圖,它們可以輸出到許多不同的輸出設備上。GDI允許一個應用程序產生筆、刷子、字體和點陣圖,以供特定的輸出操作使用。下面列出GDI中幾組比較常用的函數:
·設備上下文函數
·橢圓和多邊形函數
·繪圖工具函數
·點陣圖函數
·繪圖屬性函數
·正文函救
·映射函數。
·坐標函數
·元文件(metafile)函數
·區域函數
·裁剪(clipping)函數·
窗口應用程序輸出圖形的操作步驟如下:
①取得指定窗口的當前顯示設備上下丈,顯示設備上下文實際上是一個數據結構,它包括該窗口的參數及各種圖形、文字屬性的現行設定值,它們對以後的圖形、文字輸 出命令起控製作用。
②選擇用戶坐標系及映射方式。
③設定用戶坐標系中的觀察窗口和設備坐標系中的顯示視區。
④輸出圖形、文字和圖象。
⑤釋放所使用的顯示設備上下文。
當想要在圖形輸出設備(例如屏幕或列印機)上繪制圖形時,必須首先獲得設備上下文的句柄。先給出這個句柄,Windows才允許程序使用設備,在GDI函數中將句柄作為一個參數傳入,向Windows標明需要使用的設備。
設備上下文中包含許多屬性,當GDI在不同的設備上工作時都要用到這些屬性。使用這些屬性可使GDI只關心起始和終止坐標的大小,而不必關心有關對象的其他屬性,如顏色、背景等等,因為這些都是設備上下文的一部分。當需要修改這些屬性時,只需調用一個修改設備上下文中屬性的參數,以後的程序中都使用修改後的設備上下文屬性。設備上下文是連接Windows應用程序、設備驅動程序以及輸出設備的紐帶。
獲取設備上下文句柄有多種方法。最一般的方法是當處理一條消息時獲得了設備上下文、並在退出窗口之前釋放它。一般的處理方法如下:
在處理WM_PAINT消息時
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps)
EndPaint (hwnd,&ps);
其數據結構為:
HDC hWnd;
PAINTSTRUCT ps;
而在windows.h中定義了PAINTSTRUCT的數據結構。
type struct tagPAINTSTRUCT {
HDC hdC;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL flncUpdate;
BYTE rgbReserved[16];
}PAINTSTRUCT;
其中,hdc用於標識顯式上下文,fErase指出背景是否重畫,rcPaint是塗色矩形,其餘的域均為保留。這里的hdc是BeginPaint返回的設備上下文句柄,有了從DeginPaint獲取的設備上下文句柄,就可以也只能在ps指出的rcPaint的矩形內繪圖,EndPaint調用使這一區域有效。
第二種方法如下所示,使用這種方法獲取和釋放設備上下文可以在整個用戶區內畫圖,圖形在整個用戶區域內都有效:
hdC=GetDc (hwnd );
…畫圖操作…
ReleaseDC (hwnd , hdc );
使用下面第三種方法獲取和釋放設備上下文,可以在整個窗口內畫圖,圖形在整個窗口內有效:
hdC=GetWindowDc(hwnd);
…畫圖操作…
ReleaseDc(hwnd,hdc);
使用下面第四種方法獲取和釋放設備上下文,可以在整個顯示器區域內畫圖,圖形在整個顯示器區域內部有效:
hdc=CreateDC (lpszDriver ,lpszDevice ,lpszOutput , lpData);
…畫圖操作…
ReleaseDC(hdc);
其中lpszDriver指向設備驅動程序的DOS文件名(不帶擴展名),lpszDevice指向專用設備名(例如Epson Fx-80),lpszOutput指向物理輸出介質(文件或輸出埠)的DOS文件名或設備名,lpData指向含有設備驅動程序的設備專用的初始化數據的DEVMODE數據結構。例如:
hdc=CreateDC("DISPLAY",NULL,NULL,NULL);
使用屏幕畫圖,而:
hdc= CreateDC ("IBMGRX","IBM Graphics","LPT1",NULL );
在列印機上輸出圖形,這里的lpData置為默認值,可以在WIN.INI中找到初始化值。
如果不需要獲取設備上下文,即不需要在設備上下文中操作,只需了解有關設備上下文的信息,可以用如下語句:
hdcInfo = CreateDC (lpszDriver, lpszDevice,lpszOutput, lpData );
……
DeteteDC (hdcInfo);
另外,還可以使用設備上下文來對點陣圖的內存進行控制,如下所示:
hdcMem = CreateCompatibleDC (hdc)
OeleteDc(hdcMem );
一個元文件是以二進制形式編碼的GDI調用集合,可通過獲取一個元文件設備上下文來建立一個文件:
hdcMeta=CreateMetaFile(lpszFilename);
……
hmf=CloseMetaFile(hdCMeta);
在元文件設備上下文有效期間,使用hdcMeta所進行的任何GDI調用都成為元文件的一部分,當調用CloseMetaFile時,設備上下文句柄變化無效,函數返回元文件(hmf)的句柄。
一個設備上下文通常涉及物理設備,如視頻顯示器、列印機等,所以需要獲取有關該設備的信息,如顯示器大小和彩色能力等。可以通過調用GetDeviceCaps函數來獲取這樣的信息:
nValue=GetDeviceCaps (hdc,nIndex);
這里的hdc標識設備上下文,nIndex確定返回值,它可以是window.h中所定義的28個標識符中的一個,例如nIndex=DRIVEVERSION,則該函數返回的是版本號。
真正影響在用戶區域上繪制過程的設備上下文屬性是「映射方式」,與映射方式屬性密切相關的還有如下四個設備上下義屬性:窗口原點、視窗原點、窗口范圍和視窗范圍。
Windows定義了八種映射方式,即:
這里的TWIP指的是1/1440英寸,in.代表英寸。
可以調用函數setMapMode(hdc,MapMode)來設置這八種映射方式中的一種。hdc用來標識設備上下文,nMapMode可以取MM_TEXT、MM_LOMETRIC、MM_HIMETRIC等八個值中的一個。在設置了映射方式之後,到下一次設置映射方式之前,Windows一直使用這種映射方式。如果想要獲取當前的映射方式,可用:
nMapMode= GetMapMode (hdc)
在設置了映射方式之後,就規定了邏輯單位的大小和增量的方式,在GDI畫圖函數中,可以不必考慮這些內容而直接使用邏輯數字,如:
SetMapMode(hdc ,MM_TEXT);
TextOut(hdc,8 ,16,szBuffer ,nLength)
即正文從用戶區域左起第八個象素,頂邊起第16個象素的位置開始寫操作。不管映射方式如何,Windows函數中所有坐標規定為-32768 到 32767之間的帶符號短整救。
注意映射方式只是一個設備上下文屬性,因此映射方式唯一起作用的是將映射方式作為設備上下文句柄屬性,而將該句柄當作參數的GDI函數,因此象GetSystemMetrics這樣的非GDI函數,將繼續以設備單位(象素值)返回尺寸值。
用GDI的SetPixel函數可以繪制一特定顏色的象素:
rgbActualColor =SetPixel (hdc,x,y,rgbColor);
這里hdc標識設備上下文,x ,y表示點坐標,rgbColor為一無符號的長整數,其結構為:
COLORREF rgbColor;
其中低位位元組為紅基色的相對亮度值,第二個位元組包含綠基色的相對亮度值,第三個位元組包含藍基色的相對亮度值,高位位元組必須為零。可以使用RGB函數來獲取rgbColor。
rgbColor =RGB(byRed ,byGreen,byBlue);
這里的byRed、byGreen、byBlue取值范圍為0~255,分別代表紅色、綠色、藍色的亮度。給出正確的參數之後,SetPixel返回的是調色板中最靠近所需彩色的顏色。還可以使用如下方法來取得一個特定象素的顏色:
rgbCotor= GetPixel(hdc,x,y);
畫線函數主要有三種, LineTo、Polyline 和 Arc。還有五個設備上下文屬性會影響這些函數畫出的線的外觀:筆的當前位置(僅對LineTo有影響)、筆、背景方式(對非實心筆有影響)、背景顏色(對 OPAQUE背景方式)以及繪制方式。
在這些設備上下文的屬性中,筆的當前位置影響畫線的起點,筆影響線的粗細等形狀,背景方式影響非實心筆畫出的線的模板圖形,背景顏色影響線模板背景色,繪制方式影響實心線、虛線等線屬性。
以下是典型的畫線操作步驟:
MoveTo(hdc,xStart,yStart);
LineTo(hdc ,xEnd ,yEnd);
上面兩句畫出一條從(xStart,yStart)到(xEnd,yEnd)的直線。
可以使用語句:
dwPoint = GetCurrentPosition (hdc);
獲得筆的當前位置。這里,dwPoint返回值是一個無符號長整數(或雙倍長字),其中低位字含有X坐標,高位字含有Y坐標。
可以使用MAKEPOINT函數將dwPoint轉換為POINT結構;
point = MAKEPOINT (dwPoint);
point的類型為POINT:
typedef struct togPOINT {kk1}
int x;
int y;
}POINT;
Polyline用於繪制折線,例:
Polyline(hdc,&pt,5)
將數組pt中的5個點之間用線段相連。
Arc用於畫橢圓的周邊:
Arc (hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,XEnd,yEnd );
畫出的橢圓以左上角為(xLeft,yTop),右下角為(xRight,yBottom)的矩形為界,圓弧開始於橢圓和(xStart,yStart)與橢圓中心的連線的交點處,沿著橢圓周邊的過時針方向繪制,並終止於橢圓和(xEnd,yEnd)與橢圓中小的連線的交點處。
當調用LineTo、Polyline和Arc時,Windows使用當前在設備上下文中選擇的筆來畫線,筆決定了線的顏色、密度和型式,而線型可以是實線、點線或短劃(虛)線,預設設備上下文中的筆叫做BLACK_PEN,不管映射方式如何選支筆以一個象素的寬度畫黑色的實線, BLACK_PEN是Windows提供的三支「備用筆」之一,其他兩支是WHITE_PEN和NULL_PEN,NULL_PEN是一支什麼都不畫的空筆,當然用戶也可以自己建立定製的筆。
可以通過一個句柄來引用所需的筆:
HPEN hPen;
hPen =GetStockObject(WHITE_PEN);
SelectObjeCt (hdc ,hPen) ;
SelectObject (hdc , hBrush ) ;
將邏輯刷送入設備上下文中。如果使用結束,可以用:
DeletObject (hBrush ) ;
刪除一把已建立的刷子,如果在程序中需要獲取有關於刷子的信息,則可以調用:
3.像素格式結構
每個OpenGL顯示設備都支持一種指定的像素格式。一般用一個名為PIXELFORMATDESCRIPTOR的結構來表示某個特殊的像素格式,這個結構包含26個屬性信息。Win32定義PIXELFORMATDESCRIPTOR如下所示:
typedef struct tagPIXELFORMATDESCRIPTOR
{ kk1}
// pfd
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE iLayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR;
4.初始化PIXELFORMATDESCRIPTOR結構
PIXELFORMATDESCRIPTOR中每個變數值的具體含義和設置可以參考有關資料,下面舉出一個PIXELFORMATDESCRIPTOR初始化例子來簡要說明相關變數的意義。定義PIXELFORMATDESCRIPTOR結構的pfd如下:
PIXELFORMATDESCRIPTOR pfd = { kk1}
sizeof(PIXELFORMATDESCRIPTOR), . //size of this pfd 1
PFD_DRAW_TO_WINDOW| // support window
PFD_SUPPORT_OPENGL| // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0,0,0,0,0,0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buff
0,0,0,0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0,0,0 // layer masks ignored
};
在這個結構里,前兩個變數的含義十分明顯。第三個變數dwFlags的值是
PFD_DRAW_TO_WINDOW |PFD_SUPPORT_OPENGL ,
表明應用程序使用OpenGL函數來繪制窗口
第四個:
PFD_DOUBLEBUFFER,
表明當前採用RGBA顏色模式,第五個採用24位真彩色,既1.67千萬種顏色,如果是256色系統則自動實現顏色抖動;因為沒有使用alpha緩存和累計緩存,所以從變數cAlphaBits到cAccumAlphaBits都設置為0;深度緩存設置為32位,這個緩存能解決三維場景的消隱問題;變數cAuxBuffers設置為0,在Windows 95下不支持輔助緩存;Windows 95下針對OpenGL變數ilayerType只能設置為PFD_MAIN_PLANE,但在其它平台也許支持PFD_MAIN_PLANE或PFD_MAIN_UNDERLAYPLANE;接下來bReserved變數只能設為0,而最後三個變數Windows 95都不支持,故全設置為0。
『拾』 高中數學塗色問題
這道題...不會
首先不知道中間的圓環是否塗色
其次我從來沒聽說過2個以上的同心圓塗色的問題,因為那樣的話對於分割圓環的位置偏差會導致許多種不同的情況
另:我知道一個公式是關於圓環的塗色問題,不知是不是你要的答案
具體沒記住,現推吧:
比如將一個圓環分成n份,有k種顏色給塗色,要求相臨部分顏色不能一樣,求有多少種塗色方法
第一個空中一定可以有k種塗法
第二個空中有k-1種塗法
第三個空到第n個空均有k-1種塗法
這么算如果第n個空的顏色和第一個一樣就不符合題意
但是當第n個空的顏色和第一個一樣時可以看成是將圓環分成n-1種顏色進行塗色 (這一步需要好好想明白)
所以n空塗色方法就是用k乘(k-1)的n-1次冪減去n-1空的塗色方法種數
n-1空塗色方法就是用k乘(k-1)的n-2次冪減去n-2空的塗色方法種數
以此類推得n空塗色方法就是用k乘(k-1)的n-1次冪減去k乘(k-1)的n-2次冪
減去k乘(k-1)的n-3次冪減去k乘(k-1)的n-4次冪......減去k
上式將k提出,用等比數列求和公式求得n空塗k色方法為
k*<(k-1)^(n-1)-[1-(k-1)^(n-2)/(2-k)]>
<>是大括弧 ^表示冪
大致方法就是這樣了......